- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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); // 设置为
您可能关注的文档
最近下载
- GA_T 1788.3-2021 公安视频图像信息系统安全技术要求 第3部分:安全交互.doc VIP
- 2025至2030年中国微型电子天平市场现状分析及前景预测报告.docx
- GA_T 1788.2-2021 公安视频图像信息系统安全技术要求 第2部分:前端设备.doc VIP
- GA_T 1788.1-2021 公安视频图像信息系统安全技术要求 第1部分:通用要求.doc VIP
- 备稿六步范文,备稿六步.doc VIP
- 空间信息考古-洞察及研究.docx VIP
- 丝绸之路(南道)屯戍遗址空间考古:历史脉络与当代探索.docx
- KEYENCE基恩士IV3 系列 用户手册 (PC 软件篇).pdf
- 16D303-2 常用风机控制电路图.docx VIP
- 16D303-2 常用风机控制电路图.docx VIP
原创力文档


文档评论(0)