- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
S10、并发程序-套接字通信S10、并发程序-套接字通信
S10、并发程序-套接字通信1、套接字通信服务器程序sockserver.c:
S10、并发程序-套接字通信#includeunistd.h#includesys/types.h#includesys/socket.h#includenetinet/in.h#includesignal.h#includestdio.h#includestdlib.h#includestring.h#includepthread.h#includesemaphore.h#defineLinkNum5 //连接数intclient_sockfd[LinkNum]; /*分别记录服务器端的套接字与连接的多个客户端的套接字*/intserver_sockfd=-1; //命名套接字intcurLink=0; //当前连接数sem_tmutex; //表示连接数的资源信号量charstopmsg[100]; //服务器端发送消息缓冲区
S10、并发程序-套接字通信voidquit(){//客户服务通信结束处理函数inti;char*msg=服务器将要关闭了!;while(1){if(strcmp(stopmsg,quit)==0){//如果服务器端发送消息为quit,则提示服务器将关闭printf(服务器关闭!\n); for(i=0;iLinkNum;i++)if(client_sockfd[i]!=-1) write(client_sockfd[i],msg,sizeof(msg));/*依次向继续保持连接的客户端发出“服务器将关闭”的通知消息*/close(server_sockfd); //关闭服务器监听套接字 sem_destroy(mutex); //销毁连接数资源信号量mutexexit(0);}}}
S10、并发程序-套接字通信voidrcv_snd(intn){//服务器与客户端的收发通信函数,n为连接数组序号inti=0;intretval;charrecv_buf[1024]; //接收消息缓冲区charsend_buf[1024]; //发送消息缓冲区intclient_len=0;intrcv_num; //从客户端接收到的消息长度pthread_ttid; //线程idtid=pthread_self(); //获取当前线程idprintf(-----------服务器线程id=%u使用套接字%d,n=%d与客户机对话开始...\n,tid,client_sockfd[n],n);do{//服务器与客户端循环发送接收消息 memset(recv_buf,0,1024);//接收消息缓冲区清零 printf(服务器线程id=%u,套接字%d,n=%d等待客户端回应...\n,tid,client_sockfd[n],n);rcv_num=read(client_sockfd[n],recv_buf,sizeof(recv_buf));
S10、并发程序-套接字通信 printf(服务器线程id=%u,套接字%d,n=%d从客户端接受的消息长度=%d\n,tid,client_sockfd[n],n,strlen(recv_buf));printf(3.服务器线程id=%u,套接字%d,n=%d---客户端,服务器从客户端接受的消息是:(%d):%s\n,tid,client_sockfd[n],n,rcv_num,recv_buf); if(rcv_num==0)break; sleep(1); if(strncmp(recv_buf,!q,2)==0)break; //若接收到!q,则结束循环,通信结束printf(4.服务器线程id=%u,套接字%d,n=%d---客户端,请输入服务器要发送给客户机的消息:,tid,client_sockfd[n],n); memset(send_buf,0,1024); //发送消息缓冲区清零scanf(%s,send_buf); //服务器端键盘输入字符串消息,输入!q或quit,则通信结束 strcpy(
您可能关注的文档
- 《信号与系统》课件_第1章.ppt
- 《Linux应用实例教程》课件_讲义1列目录.pptx
- 《计算机操作系统》课件_5.3IO控制方式.pptx
- 《计算机操作系统》课件_4.5段页式存储管理方式.pptx
- 《Linux应用实例教程》课件_讲义15批处理操作接口5case与for循环.pptx
- 《Linux应用实例教程》课件_讲义18批处理操作接口8函数.pptx
- 《Linux应用实例教程》课件_讲义14批处理操作接口4测试、if判断.pptx
- 《Linux应用实例教程》课件_讲义28并发程序-父子进程线程异步性.pptx
- 《Linux应用实例教程》课件_讲义16批处理操作接口6while循环.pptx
- 《Linux应用实例教程》课件_讲义31并发程序-共享内存通信.pptx
- c程序员面试题及答案.doc
- 第01讲 运动的描述(练习)(解析版)-【上好课】2025年高考物理一轮复习讲练测(新教材新高考).pdf
- c的面试题及答案.doc
- 第01讲 运动的描述(练习)(原卷版)-【上好课】2025年高考物理一轮复习讲练测(新教材新高考).pdf
- 2003年非典后航空复盘分析报告.pdf
- 第02讲 匀变速直线运动的规律(练习)(解析版)-【上好课】2025年高考物理一轮复习讲练测(新教材新高考).pdf
- 第02讲 匀变速直线运动的规律(练习)(原卷版)-【上好课】2025年高考物理一轮复习讲练测(新教材新高考).pdf
- c考试题库及答案.doc
- c面试题及答案.doc
- 汽车管件及座椅骨架、异形金属结构件生产线改造项目(技术改造)报告表.pdf
文档评论(0)