【WIN开发】Windows Socket初步(UDP)
一、UDP是什么UDP 寄明信片写上地址IP端口就扔出去不保证对方一定能收到不保证顺序但速度很快对比TCP打电话特性TCP打电话UDP寄明信片连接要先拨号接通不用连接直接发可靠性可靠不丢包不可靠可能丢顺序保证顺序不保证效率较低高适用场景文件传输、网页视频直播、游戏二、UDP核心函数2.1 发送sendtointsendto(SOCKET s,// 套接字constchar*buf,// 要发的数据intlen,// 数据长度intflags,// 标志一般0constsockaddr*to,// 目标地址inttolen// 地址长度);2.2 接收recvfromintrecvfrom(SOCKET s,// 套接字char*buf,// 接收缓冲区intlen,// 缓冲区大小intflags,// 标志一般0sockaddr*from,// 发送方地址返回int*fromlen// 地址长度传入传出);三、UDP服务器代码详解#includeWinSock2.h#includeiostream#pragmacomment(lib,ws2_32.lib)intmain(){// 1. 初始化网络库 WORD wVersion;WSADATA wsaData;interr;wVersionMAKEWORD(1,1);// 请求1.1版本errWSAStartup(wVersion,wsaData);if(err!0)returnerr;// 检查版本if(LOBYTE(wsaData.wVersion)!1||HIBYTE(wsaData.wVersion)!1){WSACleanup();return-1;}// 2. 创建UDP套接字 // SOCK_DGRAM 表示UDP数据报SOCKET sockSrvsocket(AF_INET,SOCK_DGRAM,0);// 3. 绑定地址和端口 SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addrhtonl(INADDR_ANY);// 本机任意IPaddrSrv.sin_familyAF_INET;// IPv4addrSrv.sin_porthtons(6001);// 端口6001bind(sockSrv,(SOCKADDR*)addrSrv,sizeof(SOCKADDR));// 4. 循环接收和回复 SOCKADDR_IN addrCli;// 存放客户端地址intlensizeof(SOCKADDR_IN);charrecvBuf[100];charsendBuf[100];while(true){// 接收客户端数据// recvfrom会返回发送方的地址addrClirecvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)addrCli,len);// 打印收到的数据std::cout收到: recvBufstd::endl;// 构造回复sprintf_s(sendBuf,100,Ack %s,recvBuf);// 发送给刚才的客户端sendto(sockSrv,sendBuf,strlen(sendBuf)1,0,(SOCKADDR*)addrCli,len);}// 5. 清理 closesocket(sockSrv);WSACleanup();return0;}四、UDP客户端代码详解#includeWinSock2.h#includeiostream#pragmacomment(lib,ws2_32.lib)intmain(){// 1. 初始化网络库 WORD wVersion;WSADATA wsaData;interr;wVersionMAKEWORD(1,1);errWSAStartup(wVersion,wsaData);if(err!0)returnerr;if(LOBYTE(wsaData.wVersion)!1||HIBYTE(wsaData.wVersion)!1){WSACleanup();return-1;}// 2. 创建UDP套接字 SOCKET sockClisocket(AF_INET,SOCK_DGRAM,0);// 3. 设置服务器地址 SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addrinet_addr(127.0.0.1);// 本机addrSrv.sin_porthtons(6001);// 服务器端口addrSrv.sin_familyAF_INET;intlensizeof(SOCKADDR);charsendBuf[]hello;charrecvBuf[100];// 4. 发送数据 sendto(sockCli,sendBuf,strlen(sendBuf)1,0,(SOCKADDR*)addrSrv,len);// 5. 接收回复 // 注意这里addrSrv会被覆盖为发送方的地址recvfrom(sockCli,recvBuf,100,0,(SOCKADDR*)addrSrv,len);std::cout收到回复: recvBufstd::endl;// 6. 清理 closesocket(sockCli);return0;}五、UDP vs TCP 核心区别5.1 服务器端对比步骤TCP服务器UDP服务器1socket()socket()2bind()bind()3listen()❌ 不需要4accept()❌ 不需要5recv()/send()recvfrom()/sendto()5.2 客户端对比步骤TCP客户端UDP客户端1socket()socket()2connect()❌ 不需要3send()/recv()sendto()/recvfrom()5.3 关键区别TCP有连接// TCP必须先connectconnect(sock,...);send(sock,data,len,0);// 不用指定地址// 断开连接后就不能发了UDP无连接// UDP直接发每次都要指定地址sendto(sock,data,len,0,addr,sizeof(addr));// 可以给不同地址发sendto(sock,data1,len1,0,addr1,sizeof(addr1));sendto(sock,data2,len2,0,addr2,sizeof(addr2));六、UDP的特点详解6.1 无连接像寄信// UDP服务器一个套接字可以接收所有客户端的消息while(true){recvfrom(sock,buf,...,clientAddr,...);// 处理clientA的消息// 处理clientB的消息// 谁发来就处理谁}// TCP服务器每个客户端要单独的套接字client1accept(sock,...);client2accept(sock,...);// 每个客户端有自己的电话线6.2 不保证顺序// 发送顺序sendto(sock,A,...);// 先发Asendto(sock,B,...);// 后发B// 接收顺序可能是// 收到 B// 收到 A// 因为走不同的网络路径后发的可能先到6.3 不保证到达// 发送10个包for(inti0;i10;i){sendto(sock,data[i],...);}// 可能只收到8个// 2个在网络中丢了不会重传七、UDP适合做什么7.1 视频直播/会议// 丢几帧没关系流畅最重要while(hasFrame){sendto(sock,frame,...);// 直接发丢了就丢了}7.2 网络游戏// 玩家位置更新while(player.move()){sendto(sock,position,...);// 快速更新丢包无所谓}7.3 DNS查询// 发一个请求等一个回复sendto(sock,query,...);// 问www.baidu.com的IPrecvfrom(sock,reply,...);// 答220.181.38.1487.4 不适合的场景文件传输不能丢数据网页浏览必须完整邮件发送必须可靠八、UDP编程常见问题8.1 数据包大小限制// UDP包最大65507字节// 超过会失败charbigBuf[70000];sendto(sock,bigBuf,70000,...);// ❌ 可能失败8.2 接收缓冲区charrecvBuf[100];recvfrom(sock,recvBuf,100,...);// 最多收100字节// 如果对方发了200字节只会收前100剩下的丢了8.3 地址重用// UDP服务器可以同时被多个客户端发// 但一个端口只能被一个程序绑定UDP就像寄明信片不用提前打招呼无连接直接写上地址就扔出去sendto速度快但不保证能收到不可靠。适合视频直播、网络游戏这些可以忍受偶尔丢包的应用

相关新闻

代理协议深度解析:HTTP与SOCKS5如何科学选型?

代理协议深度解析:HTTP与SOCKS5如何科学选型?

在爬虫、跨境多账号运营、自动化测试、流量调度等场景中,一个高频问题始终困扰着开发者:“我该用HTTP代理还是SOCKS5?”很多人将选型简化为“哪个更快”或“哪个支持HTTPS”,却忽略了更本质的问题:代理协议工作在网络栈…

2026/7/3 3:19:08 阅读更多 →
780MHz频段天线模块选购指南与应用方案解析

780MHz频段天线模块选购指南与应用方案解析

随着物联网 (IoT) 和无线通信技术的快速发展,780MHz频段作为中国特定的Sub-GHz频段,已成为智慧城市、工业物联网、智能农业等领域的重要通信频段之一。本文将围绕780MHz频段天线模块的选购指南与应用方案进行深入解析,结合权威性数据平台的市…

2026/7/3 11:59:40 阅读更多 →
**Grok3mini写剧本2025指南,解锁AI辅助创作新范式**

**Grok3mini写剧本2025指南,解锁AI辅助创作新范式**

Grok3mini写剧本2025指南,解锁AI辅助创作新范式据《2025中国数字内容产业白皮书》显示,2025年国内剧本创作市场规模预计突破120亿元,但其中能熟练运用AI工具提升效率的创作者占比不足15%。与此同时,量子探险2025年1至9月的运营数据…

2026/7/4 11:39:45 阅读更多 →

最新新闻

STM32F410RB与MC6470 IMU的高精度姿态控制实现

STM32F410RB与MC6470 IMU的高精度姿态控制实现

1. 项目背景与硬件选型解析在嵌入式系统开发中,精确的运动感知和控制能力是许多应用的核心需求。MC6470作为mCube推出的6自由度惯性测量单元(6DOF IMU),集成了三轴加速度计和三轴磁力计,能够提供完整的空间姿态数据。而STM32F410RB则是STMicr…

2026/7/5 7:34:11 阅读更多 →
MAX9744与PIC18F2455构建高效D类音频放大器方案

MAX9744与PIC18F2455构建高效D类音频放大器方案

1. 项目背景与核心组件解析在DIY音频设备改造和嵌入式音频系统开发中,功率放大器的选型直接影响最终音质表现。MAX9744作为一款高效D类音频功率放大器,搭配PIC18F2455微控制器的灵活控制能力,可以构建出性能优异且可编程的音频放大解决方案。…

2026/7/5 7:34:11 阅读更多 →
STM32与DS28EC20 1-Wire EEPROM嵌入式存储方案实战

STM32与DS28EC20 1-Wire EEPROM嵌入式存储方案实战

1. 项目背景与核心需求 在嵌入式系统开发中,持久化存储用户配置和偏好设置是一个经典需求。无论是工业控制设备、消费电子产品还是物联网终端,都需要在断电后仍能保留关键参数。传统方案如EEPROM或Flash存储各有局限——前者容量小、成本高,后…

2026/7/5 7:34:11 阅读更多 →
AppScan 10.0.1 安装部署全攻略:从证书导入到环境修复的避坑指南

AppScan 10.0.1 安装部署全攻略:从证书导入到环境修复的避坑指南

1. 项目概述:为什么AppScan的安装值得你认真对待如果你是一名安全工程师、渗透测试人员,或者正在负责公司应用系统的安全评估,那么IBM Security AppScan这个名字你一定不陌生。作为一款老牌且功能强大的Web应用动态安全测试(DAST&…

2026/7/5 7:32:10 阅读更多 →
STM32L152RE与25CSM04 EEPROM的高速数据检索优化方案

STM32L152RE与25CSM04 EEPROM的高速数据检索优化方案

1. 项目背景与核心需求在嵌入式系统开发中,数据检索的速度和精度往往成为系统性能的瓶颈。传统方案通常面临两个矛盾:要么使用低速但容量大的存储介质(如SD卡),要么选择高速但容量受限的片上Flash。25CSM04这款4Mb SPI…

2026/7/5 7:30:10 阅读更多 →
WindowsCleaner:彻底解决C盘爆红的终极清理工具,快速释放磁盘空间

WindowsCleaner:彻底解决C盘爆红的终极清理工具,快速释放磁盘空间

WindowsCleaner:彻底解决C盘爆红的终极清理工具,快速释放磁盘空间 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否经常遇到Windows电…

2026/7/5 7:30:10 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻