- 1、本文档共36页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
UDP_winsocket简单示例讲解
2015.9.21 * 曹亚帅 UDP_WINSOCK 三枚铜钱工作室 ??UDP 用最通俗的话讲,所谓UDP,就是发送出去就不管的一种网络协议。因此UDP编程的发送端只管发送就可以了,不用检查网络连接状态。下面用例子来说明怎样编写UDP,并会详细解释每个API和数据类型。 UDP协议模式 【原创分享】Win32 Socket简单示例 用简单的代码和演示说明了WinSocket的使用一般必要步骤。 先看看程序执行的效果吧: 最上面的一个窗口为服务端,下面的窗口为客户端; 服务端的主循环负责接收数据。如果客户端输出“exit/quit”字符串的话,则服务端和客户端程序终止。 这个示例主要是通过简单的代码让初学者了解到WSA(WinSocketAPI)的启动相关的函数和参数,以及收发相关的两个函数的使用,最后释放WS资源。可以理解为一个最小的C/S演示。 对于聊天程序来说,即使丢失一些数据,也不会影响信息的交流,可以根据上下文的情况,知道对方所要表达的意思,或者根据对方的信息,重新发送我们所说的话。 对于TCP来说,在通信前,需要经过三步握手协议以建立连接,而建立过程往往是比较消耗时间的。建立连接后,在聊天过程中,可能经过好长一段时间,双方才会说一句话,那么连接应该保持还是应先断开,等对方说话时再建立呢?也就是说,TCP协议的面向连接、数据确认和重传机制将会影响聊天的效率。 所以对于聊天类的软件来说,通常都采用基于UDP的方式来实现。其特点就是不需要建立连接,也没有数据确认和重传机制,因此适时性较高。 本示例的基本实现过程是: 客户端通过键盘输入数据,数据被发送到服务器。后者接收到数据后,需要进行判断,如果发来的数据串为quit,表明对方向退出聊天过程,于是服务器端也发送字符串quit,聊天过程终止;否则将接收到的信息和对方的IP地址进行格式化后,在屏幕上输出。同样在客户端也需要进行相应的判断和输出。 TCP协议模式 UDP网络程序编写 基于UDP(面向无连接)的socket编程 服务器(接收端)程序 1. 创建套接字(socket) 2. 将套接字绑定到一个本地地址和端口上(bind) 3. 等待接收数据(recvfrom) 4. 关闭套接字 客户端(发送端)程序 1.?创建套接字(socket) 2. 向服务器端发送数据(sendto) 3. 关闭套接字 服务端: /* Chat Server CPP */ #pragma comment(lib,ws2_32.lib) //winsocket2需要的库文件 #include WINSOCK2.H//winsocket2 的头文件 ( 对于Winsock 2.0应包括 Winsock2.h文件) #include stdio.h WSADATA类型是一个结构,描述了Socket库的一些相关信息,其结构定义如下: typedef struct WSAData { ??????? WORD??????????????????? wVersion; ??????? WORD??????????????????? wHighVersion; ??????? char??????????????????? szDescription[WSADESCRIPTION_LEN+1]; ??????? char??????????????????? szSystemStatus[WSASYS_STATUS_LEN+1]; ??????? unsigned short????????? iMaxSockets; ??????? unsigned short????????? iMaxUdpDg; ??????? char FAR *????????????? lpVendorInfo; } WSADATA; wVersionRequested = MAKEWORD( 2, 0 );? 注意低位内存存储主版本号2,高位内存存储副版本号0,其值为0x0002。使用宏LOBYTE可以读取WORD的低位字节,HIBYTE可以读取高位字节。 void main ( ) { /* 第一步:初始化WINSOCK */ WORD wVersionRequested; // 应用程序所需的Winsock版本号 WSADATA wsaData; // 用来返回Winsock 实现的细节信息 int err; // 出错代码 wVersionRequested = MAKEWORD(1,
您可能关注的文档
- SiC碳化硅.ppt
- SDH学习.ppt
- SiC介绍.ppt
- SLV5010.doc
- SCR法脱硝.ppt
- SN10-10型高压少油断路器检修.ppt
- shanbeippt.ppt
- SOLAS公约小知识及船舶缺陷分析.doc
- SOP某知名酒店工程部标准运作和程序(doc 30).doc
- SMT综述.ppt
- 甘肃省白银市会宁县第一中学2025届高三3月份第一次模拟考试化学试卷含解析.doc
- 2025届吉林市第一中学高考考前模拟生物试题含解析.doc
- 四川省三台县芦溪中学2025届高三下第一次测试生物试题含解析.doc
- 2025届江苏省启东市吕四中学高三适应性调研考试历史试题含解析.doc
- 浙江省宁波市十校2025届高三二诊模拟考试历史试卷含解析.doc
- 甘肃省甘南2025届高考生物必刷试卷含解析.doc
- 河北省石家庄市一中、唐山一中等“五个一”名校2025届高考历史四模试卷含解析.doc
- 江西省南昌市进贤一中2025届高考生物考前最后一卷预测卷含解析.doc
- 甘肃省白银市会宁县第四中学2025届高三第二次模拟考试历史试卷含解析.doc
- 宁夏银川市宁夏大学附属中学2025届高考化学押题试卷含解析.doc
文档评论(0)