




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大师级伤寒考试题
- 2025年吕梁初三考试题及答案
- 法考试题库及答案
- 2025年初二语文期中试卷及答案
- 小红书营销考试题库及答案解析
- 2025年初中语文山西真题及答案
- 2025合同范本:合同制作项目合同示例
- 教师往届招聘考试题库及答案
- 2025年新能源物流碳减排量核算与认证技术趋势报告
- 会计合规考试题库及答案
- (2025年标准)供热移交协议书
- 2025-2030中国智能制造示范工厂建设标准与绩效评价体系
- 区块链技术在资产追踪中的应用
- 2025年通信安全员(ABC证)考试题库(含答案)
- ISO9001-2015基础知教学课件
- 鼠疫防治知识讲座课件
- 考务人员管理办法
- 乡村医生超声培训课件
- 急性喉炎护理课件
- 大学生职业规划大赛《智能焊接技术专业》生涯发展展示
- 2025新外研版初中英语七年级上全册课文翻译
评论
0/150
提交评论