• 4924
    了解作者
  • C/C++
    开发工具
  • 4KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2019-02-27 15:19
    上传日期
Linux系统下C语言select并发编程
4_select.zip
  • net.h
    330B
  • net.h.bak
    330B
  • srv_tcp.c
    3KB
  • linklist.h
    603B
  • linklist.c
    1.8KB
  • Makefile
    181B
  • cli_tcp.c
    998B
内容介绍
#include "net.h" #include "linklist.h" int main(int argc,char **argv) { int sock_fd,conn_fd; struct sockaddr_in sin,cin; int maxfd; if(argc != 3){ fprintf(stderr,"Usage:%s <port> <IP>\n",argv[0]); exit(1); } //1、创建基于TCP套接子 if((sock_fd = socket(AF_INET,SOCK_STREAM,0)) < 0){ perror("socket"); exit(1); } //2、填充地址 bzero(&sin,sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(atoi(argv[1])); sin.sin_addr.s_addr = inet_addr(argv[2]); //3、绑定本地地址 if(bind(sock_fd,(struct sockaddr*)&sin,sizeof(sin)) < 0){ perror("bind"); exit(1); } //4、将套接子设置为监听套接子 if(listen(sock_fd,8) < 0){ perror("listen"); exit(1); } //IO多复用:select fd_set readfds; link_plist l,p,new; init_linklist(&l); //对单向链表初始化 maxfd = sock_fd; int rv; struct timeval tv; while(1){ FD_ZERO(&readfds); //清空readfds /*********************************************/ FD_SET(sock_fd,&readfds); //将监听套接字加入到readfds if(!empty_linklist(l)){ //将所有的链接套接字加入到readfds p = l->next; while(p != NULL){ FD_SET(p->data,&readfds); p = p->next; } } /*********************************************/ tv.tv_sec = 3; tv.tv_usec = 0; if((rv = select(maxfd+1,&readfds,NULL,NULL,&tv)) <0){ perror("select"); exit(1); }else if(rv == 0){ printf("time out\n"); continue; }else{ if(FD_ISSET(sock_fd,&readfds)){//有新的客户端请求链接 //5、等待客户端请求链接 socklen_t len = sizeof(cin); bzero(&cin,sizeof(cin)); if((conn_fd = accept(sock_fd,(struct sockaddr*)&cin,&len)) < 0){ perror("accept"); exit(1); } if((new = (link_plist)malloc(sizeof(link_list))) == NULL){ perror("malloc"); exit(1); } new->data = conn_fd; insert_linklist(l,new); //将新的链接套接子的文件描述符加入链表中 if(maxfd < conn_fd) maxfd = conn_fd; printf("client_IP:%s\n",inet_ntoa(cin.sin_addr)); } if(!empty_linklist(l)){//判断已经建立链接的客户端是否发送数据过来,如果有数据发送过来,就去读数据 p = l->next; while(p != NULL){ if(FD_ISSET(p->data,&readfds)){ //6、与客户端进行通信 char buf[BUFSIZ]; int ret; bzero(buf,BUFSIZ); if((ret = read(p->data,buf,BUFSIZ)) < 0){ perror("read"); // exit(1); }else if((ret == 0)||(strncmp(buf,"quit",4) == 0)){ printf("一个客户端悄悄的走了....\n"); close(p->data); del_linklist_net(l,p->data); }else{ printf("%s",buf); } } p = p->next; } } } } //7、关闭套接子 close(sock_fd); return 0; }
评论
    相关推荐
    • NS2example.rar
      在ns2下实现无线传感器网络仿真,多个节点进行网络活动
    • tor-0.2.1.20.tar.gz
      The Onion Router 洋葱路由。具体不用解释了。
    • IPMessage.zip
      局域网内聊天和文件传送工具飞鸽传书 传送文件时可以选择一个目录,速度非常快
    • some-ns2-trace-awk.rar
      ns2中的trace分析脚本,用于网络仿真,吞吐量,延时,抖动率的分析
    • WiMAX_Protocol_Code.rar
      This documentation is based on the following versions:- pre-release of the wimax model developed by NIST (file patch-wimax-prerelease-092206)- ns-2.29 此程序是NS2下用C、C++编写的,主要对Wimax 802.16d和802.16e的MAC层协议的仿真,压缩文件内部有详细的说明。 由于NS2运行在Linux下而且是对网络的模拟,因此把它归在Linux/网络类中
    • linux-socket-program.rar
      全套Socket简单编程实例,很适合于初学网络编程者!
    • WSN-node-location-demo2.rar
      无线传感器网络模拟整个流程演示视频demo
    • ns-cbrp.tar.gz
      CBRP协议(移动adhoc中基于分簇的路由协议)ns2下的源码
    • sscom32.rar
      这是一个串口调试功能的工具,可以回显烧入的驱动程序
    • rtsp.rar
      linux\UNIX下跑的一套服务端程序,支持RTSP、RTCP、RTP等各种协议,对做音视频传输挺有参考意义