WINSOCK_UDP一对多+多线程.pptVIP

  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文档。上传文档
查看更多
WINSOCK_UDP一对多+多线程汇总_中职中专_职业教育_教育专区。WINSOCK_UDP一对多实现多个客户端通信Client/Server架构作者曹亚帅关于C/S架...

WINSOCK_UDP一对多 实现多个客户端通信 Client / Server 架构 作者 曹亚帅 Contents 关于 C / S 架构 对等网 :采用分散管理的方式,网络中的每台计算机既作为客户机,又可作为服务器来工作,每个用户都管理自己机器上的资源。 Client/Server :在客户机/服务器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源。 简单点说,数据库资料全部存储在服务器上,服务器要是完蛋了,大伙也就没什么好访问的了,所有客户端应用程序全部报错,网络瘫痪. 比如银行,如果中心服务器和备用服务器全部当掉,那么银行只能停止办理业务. 第一部分 图文结合 UDP C/S编程的步骤 服务端没有设置监听和等待连接的过程。客户端没有连接服务端的过程。基于UDP的通信时不可靠地,面向无连接的,发送的数据无法确切知道对方收到没有,就算对方根本不存在,也可以发送数据出去。 这样的通信通常用在对可靠性、安全性要求不高的地方,比如语音通信(没听清楚可以让对方再说一遍)。 关于 C / S 架构 第二部分 实现思路 实现思路 一个服务器对应多个客户端,或者对应多个请求,我们采用的是线程+select的方式来解决此问题。该程序的默认设置为: 1.各参与者IP地址为127.0.0.1(环回地址,用于单机测试)。 2.编号为i的参与者端口号为不同值。由于是采取本机测试,所以每个进程的IP地址都是127.0.0.1,所以需要使用不同的端口,从而区分出不同的进程,这样才能保证网络数据发送到正确的参与者处理。 关于 多线程 WINSOCK_UDP一对多 多路复用——select() 功能:用来检测一个或多个套接字状态。 第二部分 实现思路 实现思路 一个服务器对应多个客户端,或者对应多个请求: 服务器在一个线程中向指定客户端地址发消息, 在主线程中接受客户端发过来的消息。 每当UDP客户端发数据过来时,把这个客户端加入文件描述符集中,监听它。过来一个客户端就把它加入文件描符述集中,然后监听。 关于 多线程 一个连接由(server_ip, server_port) 和(client_ip, client_port)唯一确定。 第二部分 实现思路 实现思路 一个线程中要处理多个客户(多个套接字),我们在套接字A、B上顺序调用recv企图依次接收数据。若客户A始终不发数据,则recv(A)函数将可能永远无法返回,在这期间我们错失了客户B发送来的数据。 时间选择通过select函数来实现(所谓非阻塞方式,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高) 关于 多线程 处理UDP中recv的阻塞问题 由于某些原因, 会使得函数永远处于阻塞模式。 (比如:客户用UDP给服务器传送数据的数据丢失,使得服务器端的recvfrom函数始终处于阻塞模式)这就需要调用某些函数使这些函数不再阻塞。 第二部分 思路流程 第三部分 服务器代码 /* 服务器端 cpp */ 时间:2015年10月4日 晒 程序 第四部分 代码排版 /* 服务器端 cpp */ #include stdio.h #include WinSock2.h //winsocket2 的头文件 #pragma comment (lib, Ws2_32.lib) //winsocket2需要的库文件 static char ip_cli[50]; // IP 地址字符串 static int thread; //线程 int CLIport; //端口值 晒 程序 第四部分 代码排版 //程序有一个主线程,入口函数main //在主线程上可以创建新线程,入口函数定义成如下形式: DWORD WINAPI ThreadProc( LPVOID lpParam ) //线程函数声明 { //格式不正确将无法调用成功,函数名称无限制,只要符合命名规则就行 //线程函数必须是全局函数,不能在类中声明和定义 int nStatus; unsigned long cmd; //阻塞或者非阻塞的模式 SOCKET socket_send; //创建一个套接字 socket_send=socket(AF_INET,SOCK_DGRAM,0); //创建socket服务,使用UDP协议 nStatus=ioctlsocket(socket_send,FIONBIO,cmd); // 设置为

文档评论(0)

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

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

1亿VIP精品文档

相关文档