网站大量收购独家精品文档,联系QQ:2885784924

《Linux应用实例教程》课件_讲义33并发程序-套接字通信.pptx

《Linux应用实例教程》课件_讲义33并发程序-套接字通信.pptx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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(

您可能关注的文档

文档评论(0)

kd8w + 关注
实名认证
内容提供者

kd8w

1亿VIP精品文档

相关文档