Internetdomain中面向连接通信实现.doc_第1页
Internetdomain中面向连接通信实现.doc_第2页
Internetdomain中面向连接通信实现.doc_第3页
Internetdomain中面向连接通信实现.doc_第4页
Internetdomain中面向连接通信实现.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Internet domain中面向连接通信实现#include #include #include #include #include #include #include #include #include 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_buf1024;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 portn,argv0);return 1;port=atoi(argv1); /用户输入端口号;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;elseperror(cannot accept client connect request);close(listen_fd);return 1;pid=fork();/创建子进程,由子进程完成读/写;if(pid0)printf(Message from client(%d): %sn,len,recv_buf);if(recv_buf0=)break;for(i=0;ilen;i+)recv_bufi=toupper(recv_bufi);write(com_fd,recv_buf,len);close(com_fd);return 0;elseclose(com_fd);return 0;以上为服务器端实现/*/客户机端实现#include #include #include #include #include #include int main(int argc,char *argv)int connect_fd;int ret;char snd_buf1024;int i;int port;int len;static struct sockaddr_in srv_addr;if(argc!=3)printf(Usage: %s server_ip_address portn,argv0);return 1;port=atoi(argv2);/3为端口号;connect_fd=socket(PF_INET,SOCK_STREAM,0);/建立套接字;if(connect_fd0)write(connect_fd,snd_buf,len);/把输入的字符串写入到缓冲区中;len=read(connect_fd,snd_buf,len); if(len0)printf(Message from server: %sn,snd_buf);if(snd_buf0=)break;close(connect_fd);return 0; sockaddr_in(在netinet/in.h中定义):struct sockaddr_in short int sin_family; /* sin_family指代协议族,在socket编程中只能是AF_INET */unsigned short int sin_port; /* Port number */struct in_addr sin_addr; /*sin_addr存储IP地址,使用in_addr这个数据结构*/unsigned char sin_zero8; /* sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论