Python搭建UDP简易聊天器 socket实战
本文演示如何使用 Python 内置 socket 模块搭建基于 UDP 协议的简易聊天器。通过创建数据报套接字、绑定本地端口、封装收发消息函数,并结合 while 循环实现交互式终端通信。适合需要快速验证局域网数据传输逻辑的开发者参考。
核心原理与运行环境
UDP(User Datagram Protocol)是一种轻量级的无连接传输协议。与 TCP 不同,UDP 在发送数据前无需建立握手连接,因此延迟更低、速度更快,但默认不保证数据包不丢失。利用 Python 标准库中的 socket 模块,只需寥寥数行代码即可实现基础的局域网双向通信。
运行本方案需满足以下前置条件:
- 操作系统:Windows 或 Linux(如 Ubuntu)
- 运行环境:
Python 3.x - 开发工具:PyCharm 或任意支持 Python 的编辑器
- 网络状态:参与通信的设备需处于同一局域网段内
第1步:导入 socket 模块并创建数据报对象
首先引入内置库,并使用 socket.AF_INET(IPv4)与 socket.SOCK_DGRAM(UDP)实例化套接字对象。该对象将作为后续收发数据的载体。
import socket
def main():
# 创建 UDP 套接字对象
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
注:AF_INET 对应常见的 IPv4 地址,SOCK_DGRAM 指定使用 UDP 数据报模式。PC 端通常采用 IPv4,移动端或现代物联网设备逐渐转向 IPv6。
第2步:编写独立的发送与接收函数
为避免主逻辑臃肿,将收发操作抽离为独立函数。发送时需将字符串转为字节流并指定目标 IP 与端口;接收时需绑定本机监听地址,并通过 recvfrom() 获取返回的数据包与来源地址信息。
# 发送消息模块
def send_msg(udp_socket):
msg = input('请输入你想要发送的消息:')
# 编码并发送至目标主机 (示例目标IP: 192.168.3.40,请替换为实际局域网IP)
udp_socket.sendto(msg.encode('utf-8'), ('192.168.3.40', 8080))
# 接收消息模块
def recv_msg(udp_socket):
# 接收最多 1024 字节的数据,返回 (数据字节流, 发送者地址)
recv_data = udp_socket.recvfrom(1024)
recv_msg_bytes, recv_addr = recv_data
print(f'来自 {recv_addr} 的消息: {recv_msg_bytes.decode("utf-8")}')
第3步:整合主循环处理用户交互
在 main() 中完成套接字初始化与本地端口绑定后,进入无限循环等待用户指令。输入 "exit" 可安全终止循环并关闭连接。
def main():
# 1. 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2. 绑定本机地址与端口 ('' 代表绑定所有可用网卡接口)
localhost_addr = ('', 6666)
udp_socket.bind(localhost_addr)
# 3. 业务循环
while True:
op_num = input('请输入要执行的操作 [1.发送消息 2.接收消息]: ')
if op_num == '1':
send_msg(udp_socket)
elif op_num == '2':
recv_msg(udp_socket)
else:
print('输入有误,请重新输入...')
# 4. 清理资源
udp_socket.close()
if __name__ == '__main__':
main()
第4步:启动脚本与跨端测试
保存文件后直接运行脚本。控制台将呈现菜单选项。在另一台处于同网段的设备上运行接收端程序(或同一设备的另一个终端窗口),即可实现双向对话。下方展示了典型的多终端交互状态。


排错提示:若发送失败或长时间无响应,请检查目标设备的防火墙是否放行 UDP 8080/6666 端口,并确保双方 IP 在同一子网。192.168.3.40 仅为演示占位符,实际运行时务必替换为目标机真实局域网地址。
以上就是Python搭建UDP简易聊天器的详细内容,更多关于网络通信基础与Python socket模块的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













