Internetdomain中面向连接通信实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Internetdomain中面向连接通信实现

Internet domain中面向连接通信实现 #include stdio.h #include sys/types.h #include sys/socket.h #include sys/un.h #include errno.h #include unistd.h #include signal.h #include sys/wait.h #include netdb.h void sig_handler(int signo) { pid_t pid; int stat; pid=waitpid(-1,stat,WNOHANG); while(pid0){ printf(child process terminated (PID: %ld)\n,(long)getpid()); pid=waitpid(-1,stat,WNOHANG); } return; } int main(int argc,char *argv[]) { socklen_t clt_addr_len; int listen_fd;//监听套接字; int com_fd; //交换链接套接字; int ret; int i; static char recv_buf[1024]; int len; int port; pid_t pid; struct sockaddr_in clt_addr;//定义两个sockaddr_in对象; struct sockaddr_in srv_addr;// if(argc!=2){ printf(Usage: %s port\n,argv[0]); return 1; } port=atoi(argv[1]); //用户输入端口号; if(signal(SIGCHLD,sig_handler)0)//处理僵尸进程; { perror(cannot set the signal); return 1; } listen_fd=socket(PF_INET,SOCK_STREAM,0); //建立套接字; if(listen_fd0){ perror(cannot create listening socket); return 1; } memset(srv_addr,0,sizeof(srv_addr));//初始化; srv_addr.sin_family=AF_INET; //代协议族为IPV4; srv_addr.sin_addr.s_addr=htonl(INADDR_ANY);//IP地址;inet_addr(192.168.0.1); srv_addr.sin_port=htons(port); //端口号; ret=bind(listen_fd,(struct sockaddr*)srv_addr,sizeof(srv_addr)); //绑定 if(ret==-1){ perror(cannot bind server socket); close(listen_fd); return 1; } ret=listen(listen_fd,5);//监听,最多同时监听5个; if(ret==-1){ perror(cannot listen the client connect request); close(listen_fd); return 1; } while(1){ len=sizeof(clt_addr); com_fd=accept(listen_fd,(struct sockaddr*)clt_addr,len);//不停的接受;不只接受一次 if(com_fd0){ if(errno==EINTR){ continue; }else{ perror(cannot accept client connect request); close(listen_fd); return 1; } } pid=fork();//创建子进程,由子进程完成读/写; if(pid0){perror(cannot create the child process); close(listen_fd); return 1; }else if(pid==0){ while((len=read(com_fd,recv_buf,1024))0){ printf(Message from client(%d): %s\n,len,recv_buf)

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档