尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
用Python实现UDP简易聊天程序!先搞懂:为啥UDP不能直接做聊天软件?
前言平时我们熟知的微信、QQ这类聊天软件底层网络方案各有不同。很多初学者第一想法直接用UDP写聊天工具代码简单、不用建立连接、速度快。但是很多人写完Demo后就踩坑消息偶尔收不到、重复收到消息、消息顺序错乱。原因很简单UDP是无连接、不可靠传输协议。内核不保证报文送达、不保证有序、丢包不会通知发送方。本文先实现一套原生UDP点对点聊天Demo服务端客户端可以互相收发文本消息模拟简易聊天窗口。再结合代码讲解原生UDP聊天存在的致命缺陷衔接上一篇《如何让UDP实现可靠传输》的知识点带大家理解商用聊天软件不会直接裸UDP通信。环境Python3.x无需额外安装第三方库使用内置socket模块。演示效果两个终端互相发送文字实现双向聊天。一、基础知识点UDP通信特点回顾无连接通信前不需要握手发送数据直接指定IP和端口尽最大努力交付没有确认、没有重传丢包直接消失支持双向通信同一个Socket既可以收消息也可以发消息面向报文不会拆分合并数据包优点开销小、延迟低缺点不可靠。⚠️ 重要TCP分为服务端/客户端UDP模式更灵活下面示例我们采用对等模式P2P两端代码几乎一致只要填写对方IP端口互相收发消息。二、Python UDP双向聊天完整代码文件名udp_chat.pyimportsocketimportthreadingclassUDPChat:def__init__(self,local_port:int,remote_ip:str,remote_port:int):# 创建UDP socketself.socksocket.socket(socket.AF_INET,socket.SOCK_DGRAM)# 绑定本机端口固定端口方便对方连接self.sock.bind((0.0.0.0,local_port))self.remote_ipremote_ip self.remote_portremote_portprint(f✅ UDP聊天启动成功本机端口{local_port})print(f 目标地址{self.remote_ip}:{self.remote_port})print( 输入消息发送exit退出程序\n)defreceive_msg(self):持续接收消息的循环单独线程运行whileTrue:try:data,addrself.sock.recvfrom(1024)msgdata.decode(utf-8)print(f\n【对方】{msg})print(你,end)exceptExceptionase:print(接收消息异常,e)breakdefsend_msg(self):读取控制台输入发送消息whileTrue:contentinput(你)ifcontent.lower()exit:print( 退出聊天程序)self.sock.close()break# 发送文本消息self.sock.sendto(content.encode(utf-8),(self.remote_ip,self.remote_port))defstart(self):# 开启子线程负责接收消息阻塞recvfrom不能阻塞输入recv_threadthreading.Thread(targetself.receive_msg,daemonTrue)recv_thread.start()# 主线程负责发送消息self.send_msg()if__name____main__:# 配置区域两端修改此处参数 # A机器配置机器A# 本机端口 8888对方IP为机器BIP对方端口9999chatUDPChat(local_port8888,remote_ip127.0.0.1,remote_port9999)# B机器配置机器B启动时注释上面启用下面这行# chat UDPChat(local_port9999, remote_ip127.0.0.1, remote_port8888)chat.start()三、运行测试步骤本地测试同一台电脑开启两个终端终端1A端使用配置chatUDPChat(local_port8888,remote_ip127.0.0.1,remote_port9999)终端2B端切换配置chatUDPChat(local_port9999,remote_ip127.0.0.1,remote_port8888)分别运行python udp_chat.py互相输入文字即可聊天。局域网/公网注意事项局域网通信填写对方内网IP公网通信需要端口映射、关闭防火墙云服务器务必在安全组开放对应UDP端口。运行效果图文字示例✅ UDP聊天启动成功本机端口8888 目标地址127.0.0.1:9999 输入消息发送exit退出程序 你哈喽测试UDP聊天 【对方】收到啦 你四、Demo暴露出原生UDP做聊天软件的4个致命问题1. 消息丢失最严重当网络波动、路由器拥塞时sendto执行成功仅仅代表数据交给系统内核无法确认对方收到消息。就像微信发消息对方收不到且你完全不知情。TCP会等待ACK超时自动重传原生UDP没有任何机制。2. 消息乱序发送顺序消息1 → 消息2 → 消息3网络转发原因接收顺序可能变成消息3 → 消息1 → 消息2聊天场景会出现对话语序错乱严重影响体验。3. 消息重复网络延迟引发路由重复投递同一条消息多次弹出。4. 无法感知对方是否离线UDP无连接你持续发送消息对方下线后本地不会得到任何通知。不知道对方在线状态。五、思考真正的聊天软件如何解决方案分三类基于TCP微信早期部分业务、传统IM依靠TCP天然可靠缺点握手延迟网络切换容易断连。可靠UDP应用层封装在UDP之上增加序列号、ACK确认、超时重传KCP、QUIC。很多游戏、实时语音、部分新式IM采用该方案。混合方案信令消息TCP可靠传输媒体语音视频使用优化后的UDP。我们上一篇博客讲解的【可靠UDP实现方案】正好可以改造这个聊天Demo增加序列号、ACK应答、超时重传就能解决消息丢失、乱序、重复问题。六、拓展优化思路你可以自行改造代码给每条消息增加唯一序列号接收端回复ACK确认收到消息发送端未收到ACK则启动重传增加心跳包检测对方在线状态增加乱序缓冲区保证消息有序展示增加用户名、消息时间戳增加简单异常断线处理。七、总结这份代码实现了极简UDP点对点文本聊天几分钟就能跑通直观感受到UDP双向通信。但是一定要分清Demo能跑 ≠ 可以生产使用。裸UDP天生缺乏可靠性机制直接拿来做聊天工具会出现消息丢失等各类问题。如果追求低延迟同时需要消息可靠不要直接裸写UDP两种选择方案一直接使用QUIC / KCP成熟可靠UDP库方案二参考可靠UDP原理在应用层自主实现确认、重传、有序机制。配套延伸阅读《如何让UDP实现可靠传输原理、问题与自研方案实践》
RELATED

相关推荐

小院里的小商机,靠它省出半年房租

小院里的小商机,靠它省出半年房租

小院里的小商机,靠它省出半年房租租厂房不如用小院,220V电就能干说白了,租个能放加工设备的厂房,小县城都得掏大几千。我去年折腾过,房东涨完租,把我利润刮掉三分之一。现在好了,我们公司这款四…

📅 2026/11/14 9:30:20
独立站SEO描述怎么写?3招让谷歌疯狂点击

独立站SEO描述怎么写?3招让谷歌疯狂点击

独立站SEO描述怎么写才能吸引谷歌点击 做独立站的友人皆明晰, 即便产品详情页撰写得极为美观精巧, 要是搜索引擎捉摸不透其中关键要点, 流量便根本无法得以实现。所说的独立站SEO描述, 简单来讲就是促使谷歌领会你的页面所阐述的内容为何, 而且乐意将其举荐给搜索的用户。我于…

📅 2026/11/4 19:04:49
2026郑州GEO地理引擎优化深度解析:本地实体企业AI精准获客首选方案

2026郑州GEO地理引擎优化深度解析:本地实体企业AI精准获客首选方案

2026郑州GEO地理引擎优化深度解析:本地实体企业AI精准获客首选方案2026年,人工智能搜索正式完成商业普及,彻底颠覆了传统互联网获客逻辑。以往企业依赖关键词排名、外链堆砌、竞价投放的传统SEO模式,已经无法适配AI大模型智能推荐…

📅 2026/11/11 17:28:50
MORE NEWS

更多资讯

📰

启东电工证办理别踩坑!网上查询保你一次通过

启东电工证办理别踩坑!网上查询保你一次通过 怕考不过白交培训费?启东电工证办理流程太复杂,很多人都在抱怨培训费花了,结果还是考不过,甚至查不到网上查询结果。别急,今天我用10年从业经验,帮你搞清楚启东电工证办理的全部细节,从报考到网上查询,…

📰

济钢电工证考试官方回应:怕被中介坑?这几点必须知道

济钢电工证考试官方回应:怕被中介坑?这几点必须知道 你是不是也和很多刚毕业的小伙伴一样,听说了【济钢电工证考试】,但又不知道从哪开始?担心被中介坑,怕花冤枉钱,又怕拿不到证,还怕证书不被认可?这事儿真不是小事,尤其是咱们濮阳的工程类应届生,…

📰

普洱电工证考试时间确定!上岗必备怎么考才能不白交钱?

普洱电工证考试时间确定!上岗必备怎么考才能不白交钱? 怕考不过白交培训费?普洱电工证考试时间你搞清楚了吗?别等到考试当天才知道流程,耽误了工作也耽误了钱。现在就告诉你,上岗必备的电工证怎么考,怎么避坑,怎么拿证不走弯路。…

📰

咸阳免费考电工证流程在哪考全流程解析:电工证怎么考才能顺利上岗

咸阳免费考电工证流程在哪考全流程解析:电工证怎么考才能顺利上岗 你现在可能正被一个问题困住: 急需特种作业证才能上岗找工作 。尤其是像你这样在 咸阳 的建筑工人,手里没有电工证,连最基本的岗位面试都可能被拦下。那 咸阳免费考电工证流程…

📰

高低压电工作业心得:2026河南最新政策解读,工地太忙也能考证

高低压电工作业心得:2026河南最新政策解读,工地太忙也能考证 工地太忙根本没时间复习考试?2026河南最新政策已经出台,特种作业证考试和复审方式迎来重大调整,不再要求全职脱产备考,反而更强调“边干边学、随时可考”的灵活模式。作为一名郑州金…

📰

辽宁特种工考证怎么报?考前押题+避坑指南全在这儿了

辽宁特种工考证怎么报?考前押题+避坑指南全在这儿了 你是不是正为辽宁特种工考证发愁?不知道去哪里报名?怕被中介骗钱?别急,这波操作教你从零开始,避开所有雷区。…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬