当前位置:首页 >> 计算机软件及应用 >>

linux网络编程select函数使用例程


最近上课,老师非让我们用 select()函数编写一个网络程序,其主要是想让我们练习 一下数据的 IO 和复用,翻看书上就是一个小例子,调了一阵还不好使,最后参考 linux 典 藏大系的《linux 网络编程》宋敬彬、孙海滨等编著的书才搞定的,书上也没有一个完整的 例子,我照着敲又改了一下,今天决定共享出来,当然程序调试是好使的,实现是客户端向 服务端查询时间,客户端通过 TC

P 链接往服务端发送“what's the time?”时,服务端通过 select()函数查询 10S 看有没数据,如果有是“what's the time?”数据,就往客户端发送 时间。 服务端例程如下: process.c 文件内容如下: void process_conn_server(int s) { ssize_t size = 0; char buffer[1024]; //接受缓冲区 char buff[1024]; //发送给客户端缓冲区 time_t ticks; //获取当前时间 ticks = time(NULL); fd_setrd; structtimevaltv; int err; while(1) { FD_ZERO(&rd); FD_SET(s,&rd); tv.tv_sec = 10; //设定查询 10S 钟 tv.tv_usec = 0; err = select(s+1,&rd,NULL,NULL,&tv); if(err == -1) //出错处理 { perror("select()"); } else if(err) //有数据 { size = read(s,buffer,1024); //读取数据 if(size == 0) return ; if(size>0) { if(strncmp(buffer,"what's the time?",strlen("what's time?"))==0) //判断是否为"what's the time?" { sprintf(buff,"%.24s\r\n",ctime(&ticks)); //将当前时间装入到发送缓冲区 write(s,buff,strlen(buff)); //发送给客户端 }

the

else error!报错 { write(s,"error!\n",strlen("error!\n")); } } } else { printf("NO data within ten seconds.\n"); } } } void proccess_conn_client(int s) { ssize_t size = 0; char buffer[1024]; while(1) { size = read(0,buffer,1024); if(size>0) { send(s,buffer,size,0); size = recv(s,buffer,1024,0); write(1,buffer,size); } } } void sig_proccess(intsigno) { printf("Catch a exit signal\n"); exit(0); } void sig_pipe(int sign) { printf("Catch a SIGPIPE signal\n"); } #include #include #include #include #include #include <'stdio.h> <'stdlib.h> <'strings.h> <'sys/types.h> <'sys/socket.h> <'unistd.h>

// 字 符 匹 配 不 对 时 , 发 送 给 客 户 端

//规定时间内没收到数据提示

#include <'linux/in.h> #include <'signal.h> #include "time.h" #include "process.c" extern void sig_proccess(intsigno); extern void process_conn_server(int s); #define PORT 8888 #define BACKLOG 2 int main(intargc,char *argv[]) { intss,sc; structsockaddr_inserver_addr; structsockaddr_inclient_addr; int err; pid_tpid; signal(SIGINT,sig_proccess); signal(SIGPIPE,sig_proccess); ss = socket(AF_INET,SOCK_STREAM,0); if(ss<0) { printf("socket error\n"); return -1; } bzero(&server_addr,sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(PORT); err = bind(ss,(structsockaddr *)&server_addr,sizeof(server_addr)); if(err<0) { printf("bind error"); return -1; } err = listen(ss,BACKLOG); if(err<0) { printf("listen error"); return -1; } while(1) { intaddrlen = sizeof(structsockaddr); sc = accept(ss,(structsockaddr*)&client_addr,&addrlen);

if(sc<0) { continue; } pid = fork(); if(pid == 0) { close(ss); process_conn_server(sc); } else { close(sc); } } } 客户端例程如下: #include <'stdio.h> #include <'stdlib.h> #include <'strings.h> #include <'sys/types.h> #include <'sys/socket.h> #include <'unistd.h> #include <'linux/in.h> #include <'signal.h> #include "process.c" extern void sig_proccess(intsigno); extern void sig_pipe(int sign); extern void proccess_conn_client(int s); static int s; void sig_proccess_client(intsigno) { printf("Catch a exit signal\n"); close(s); exit(0); } #define PORT 8888 int main(intargc,char *argv[]) { structsockaddr_inserver_addr; int err; if(argc == 1){

printf("PLS input server addr\n"); return 0; } signal(SIGINT,sig_proccess); signal(SIGPIPE,sig_pipe); s = socket(AF_INET,SOCK_STREAM,0); if(s<0) { printf("socket error\n"); return -1; } bzero(&server_addr,sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(PORT); inet_pton(AF_INET,argv[1],&server_addr.sin_addr); connect(s,(structsockaddr*)&server_addr,sizeof(structsockaddr)); proccess_conn_client(s); close(s); } 运行过程如下: 客户端:

服务端:


相关文章:
Linux后台网络编程中select
linux网络编程select函数... 5页 免费 Linux网络编程 335页 1下载券 LINUX网络...select-client.c *purpose: 演示网络异步通讯,这是客户端程序 *Note: 任何人可...
Linux下select函数的使用
Linuxselect函数使用_计算机软件及应用_IT/计算机_专业资料。Linuxselect函数使用方法 select 系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序...
Linux socket select 函数用法详解
Linux socket select 函数用法详解_计算机软件及应用_...例程分析: #include <stdio.h> #include <stdlib....linux select 语句 13页 免费 winsocket编程几种模式...
Linux网络编程-异步通讯聊天程序select
网络编程一步一步学Linux 网络编程一步一步学-异步通讯聊天程序 select 关键词...这里要用到 select 函数使用步骤如下: 1、设置一个集合变量,用来存放所有要...
linux网络编程常用函数
linux网络编程常用函数_工学_高等教育_教育专区。linux网络编程常用函数 ...信号处理程序返回,等待一般被中断,为 了可移植性,必须准备好 select 返回 EINTR...
Linux网络编程实例详解
Linux网络编程实例详解_计算机软件及应用_IT/计算机_专业资料。Linux 网络编程实例...关于阻塞(blocking)的概念和 select()函数当服务器运行到 accept 语句时, 而没...
Linux网络编程:用C语言实现的聊天程序(同步通信)
Linux网络编程:用C语言实现的聊天程序(同步通信)_计算机软件及应用_IT/计算机_专业...select 函数就实现了这个功能。 2、select 函数原型 int select (int maxfdp1...
Linux网络编程基础之函数入门学习
这种应用用于一个由另外一个程序exec执行的程序中 凌阳教育:www.sunplusedu.com...linux网络编程select函数... 5页 免费 Linux C编程--网络编程1... 4页 免费...
Linux程序设计上机四(网络编程)
Linux程序设计上机四(网络编程)_计算机软件及应用_IT/计算机_专业资料。计算机...再次调用 select 前,需要重新赋值 fd_set fd_read; fd_set fd_select; ...
Linux网络编程-简单的客户端和服务器通讯程序开发入门
Linux 网络编程-简单的客户端和服务器通讯程序开发入门(2)简介: 本文详细介绍了 Linux 下 B/S 结构的客户端服务器通讯程序的开发入门, 其中对重要的网络函数和...
更多相关标签:
linux串口编程select | linux select 编程 | 网络编程select函数 | linux select函数 | linux中select函数 | linux select函数详解 | linux下select函数 | linux select函数使用 |