Python Socket 常用代码汇总|TCP/UDP 服务端、客户端基础模板 前言很多初学网络编程的小伙伴弄懂Socket、TCP、UDP理论之后最头疼的问题到底有哪些通用代码模板网上代码零散版本不一经常出现端口占用、连接断开、编码报错、Windows/Linux兼容性问题。本文整理Python标准库socket最常用、工程上高频使用的基础代码全部基于Python3原生socket无需第三方库复制即可运行。前置知识点TCP面向连接、可靠、流式传输UDP无连接、不可靠、数据包传输所有示例默认使用 IPv4 (AF_INET)一、通用基础知识点导入模块importsocket核心参数说明socket.AF_INETIPv4socket.SOCK_STREAMTCPsocket.SOCK_DGRAMUDPbind((ip, port))绑定地址端口listen()开启监听仅TCPaccept()阻塞等待客户端连接仅TCPrecv(buffer)接收数据send()/sendall()发送数据⚠️ 重点网络传输只能发送bytes字节流字符串必须encode()收到字节需要decode()二、TCP 全套常用模板1. TCP 服务端基础版持续监听接收客户端消息回传数据importsocketdeftcp_server():# 创建socket对象 TCPserver_socksocket.socket(socket.AF_INET,socket.SOCK_STREAM)# 解决服务端重启端口立即复用避免 WinError 10048 端口占用server_sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)# 绑定地址 0.0.0.0 监听本机所有网卡addr(0.0.0.0,8888)server_sock.bind(addr)# 开启监听参数为等待连接队列大小server_sock.listen(5)print(fTCP服务端启动成功监听{addr})whileTrue:# 阻塞等待客户端接入client_conn,client_addrserver_sock.accept()print(f新客户端连接{client_addr})try:whileTrue:# 最多接收1024字节dataclient_conn.recv(1024)ifnotdata:# 空数据 客户端主动断开连接breakmsgdata.decode(utf-8)print(f收到[{client_addr}]消息{msg})# 回复客户端respf服务端已收到{msg}client_conn.sendall(resp.encode(utf-8))exceptExceptionase:print(连接异常,e)finally:client_conn.close()print(f客户端{client_addr}已断开)if__name____main__:tcp_server()2. TCP 客户端基础版主动连接TCP服务端发送消息并接收返回importsocketdeftcp_client():client_socksocket.socket(socket.AF_INET,socket.SOCK_STREAM)server_addr(127.0.0.1,8888)# 连接服务端client_sock.connect(server_addr)print(成功连接服务端)send_msgHello Socket TCPclient_sock.sendall(send_msg.encode(utf-8))# 接收响应recv_dataclient_sock.recv(1024)print(服务端返回,recv_data.decode(utf-8))client_sock.close()if__name____main__:tcp_client()3. TCP 客户端设置超时非常常用防止网络阻塞recv、connect永久卡死importsocketdeftcp_client_timeout():client_socksocket.socket(socket.AF_INET,socket.SOCK_STREAM)client_sock.settimeout(5)# 设置超时5秒try:client_sock.connect((127.0.0.1,8888))client_sock.sendall(btest timeout)dataclient_sock.recv(1024)print(data.decode())exceptsocket.timeout:print(连接/接收超时)exceptConnectionRefusedError:print(无法连接服务端未启动)finally:client_sock.close()if__name____main__:tcp_client_timeout()TCP注意事项TCP是流式协议存在粘包问题大批量传输需要自定义数据包长度协议优先使用sendall()send()不一定一次性发送完所有数据recv返回空字节代表对方关闭连接。三、UDP 全套常用模板1. UDP 服务端UDP无连接不需要listen、acceptimportsocketdefudp_server():udp_socksocket.socket(socket.AF_INET,socket.SOCK_DGRAM)udp_sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)udp_sock.bind((0.0.0.0,9999))print(UDP服务端启动端口9999)whileTrue:data,addrudp_sock.recvfrom(1024)msgdata.decode(utf-8)print(f来自{addr}:{msg})# 回包replyfUDP收到消息{msg}udp_sock.sendto(reply.encode(utf-8),addr)if__name____main__:udp_server()2. UDP 客户端importsocketdefudp_client():udp_socksocket.socket(socket.AF_INET,socket.SOCK_DGRAM)server_addr(127.0.0.1,9999)msgHello UDP Socketudp_sock.sendto(msg.encode(utf-8),server_addr)# 等待接收返回data,addrudp_sock.recvfrom(1024)print(服务端响应,data.decode(utf-8))udp_sock.close()if__name____main__:udp_client()UDP重点提醒无连接就算服务端没启动sendto也不会报错不存在连接断开的概念不会感知对方是否在线不存在粘包数据包独立不保证送达、不保证顺序。四、高频实用工具代码片段1. 获取本机内网IP写socket程序经常需要获取本机地址defget_local_ip():try:ssocket.socket(socket.AF_INET,socket.SOCK_DGRAM)# 随便连接一个公网地址不真实发包用来获取本机网卡IPs.connect((8.8.8.8,80))ips.getsockname()[0]s.close()returnipexceptException:return127.0.0.1print(get_local_ip())2. 判断端口是否被占用调试socket必备工具importsocketdefis_port_used(host127.0.0.1,port8888):socksocket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.settimeout(1)resultFalsetry:sock.connect((host,port))resultTrueexceptConnectionRefusedError:resultFalsefinally:sock.close()returnresultprint(is_port_used(port8888))3. 简单十六进制收发二进制通信常用很多硬件通信、内网隧道都是传输二进制数据# 字符串转字节发送raw_databytes.fromhex(01 02 03 0A FF)# sock.sendall(raw_data)# 收到字节打印十六进制# data sock.recv(1024)# print(data.hex())五、常见踩坑总结开发必看端口占用 WinError 10048解决添加setsockopt(SO_REUSEADDR,1)客户端只能本地访问外部设备连不上原因服务端绑定127.0.0.1改为0.0.0.0UnicodeDecodeError 编码错误解决方案通信双方约定编码utf-8不要直接解码未知二进制recv卡死程序解决方案设置settimeout()超时捕获异常TCP大量数据收发乱码/拼接在一起根源TCP粘包需要自定义封包协议先发送数据包长度六、学习路线建议先跑通本文TCP客户端服务端理解连接生命周期再学习UDP理解无连接通信差异解决TCP粘包实现自定义协议通信进阶多线程处理多客户端连接上面示例单线程只能处理一个客户端高阶asyncio异步socket、自研内网穿透、代理隧道七、拓展方向掌握以上基础模板后可以基于这些代码开发简易聊天室内网穿透客户端/服务端硬件设备TCP/UDP数据采集简单端口扫描器自定义TCP代理服务

相关新闻

最新新闻

C++服务防雪崩实战:从资源管理到熔断限流的架构设计

C++服务防雪崩实战:从资源管理到熔断限流的架构设计

1. 项目概述:从一次线上事故说起那天凌晨三点,我被一阵急促的电话铃声惊醒。监控大屏上,负责核心交易撮合的C服务集群,响应时间曲线像坐上了火箭,从平时的5毫秒瞬间飙升至5000毫秒,紧接着,错误率…

2026/7/31 9:42:38
食品经营许可证识别API嵌入指南:参数、调用与异常处理

食品经营许可证识别API嵌入指南:参数、调用与异常处理

适用场景与接口能力边界 在企业供应链合规、平台入驻商户资质审核、餐饮行业监管等场景中,需要快速提取食品经营许可证上的关键字段——许可证编号、经营者名称、法定代表人、经营场所、主体业态、经营项目、有效期等。传统的人工录入效率低且易出错,通…

2026/7/31 9:42:38
银行卡BIN查询:从原始curl到结构化封装

银行卡BIN查询:从原始curl到结构化封装

适用场景 银行卡BIN(Bank Identification Number)是卡号前6位,用于唯一识别发卡机构、卡品牌(银联、Visa、Mastercard等)和卡类型(借记卡、信用卡)。在以下场景中频繁用到: 支付风…

2026/7/31 9:42:38
学习行为数据 + 大模型:构建员工技能画像、自动人才盘点技术思路

学习行为数据 + 大模型:构建员工技能画像、自动人才盘点技术思路

一、前言:传统人才盘点的核心痛点绝大多数企业的人才盘点和技能评估,长期处于“经验化、人工化、碎片化”状态,主要存在四大痛点:• 数据维度单一:仅依靠月度/季度绩效、主观述职评价,无法覆盖员工日常学习…

2026/7/31 9:42:38
CUDA 内存类型的分层结构图

CUDA 内存类型的分层结构图

上图按三大层次组织:主机端(蓝)、设备端(青)、GPU 片上(紫)。下图面向驱动开发实战,6 个关键场景直接对应到内存类型和 API,底部表格可快速查阅选型。

2026/7/31 9:42:38
Unity Shader实现雷达扫描效果:从原理到实战优化

Unity Shader实现雷达扫描效果:从原理到实战优化

1. 项目概述:从“雷达扫描”到视觉叙事 在游戏开发、数字孪生或者交互式数据可视化项目中,我们常常需要一种直观、动态的方式来展示空间信息或状态变化。一个经典的解决方案就是“雷达效果”。它不仅仅是屏幕上划过的一道扇形光波,更是一种强…

2026/7/31 9:37:37

月新闻