Python从零开始使用Socket模块实现网络编程入门指南
使用Python内置socket模块可快速实现网络通信,通过TCP和UDP协议分别演示服务端与客户端的数据收发流程,并强调编码转换、端口绑定、地址配置等注意事项,为网络编程入门提供清晰示例。
聊网络编程,离不开TCP、UDP、IP、端口这些概念,对新手来说确实有点门槛。但核心其实很直观——Socket(套接字),就是网络通信的“钥匙”。无论你是做后端开发、爬虫,还是搞即时通讯,最终都得和它打交道。
这篇文章会用Python标准库里的socket模块,从零搭建一个服务端和客户端的通信示例。不深究底层原理,不涉及复杂框架,跟着代码走一遍,你就能把Socket编程的基本流程搞清楚。

前提是你已经掌握Python基础语法。Python内置的socket模块,无需额外安装,开箱即用。
一、什么是Socket
可以把Socket理解为网络通信的“电话线”,两个程序之间想要互相传数据,就得靠它。一端监听,一端发起连接,通过IP地址和端口号,就能唯一确定一条通信通道。
常用的通信协议有两种:
- TCP:面向连接,可靠传输。数据不会丢失,顺序也不会乱。通信前必须先建立连接(三次握手)。文件传输、聊天软件,基本都用TCP。
- UDP:无连接,不可靠。无需握手,发送速度快,但可能丢包。直播、语音通话、广播等场景更合适。
Python的socket库支持这两种协议,下面先看TCP怎么用。
二、TCP通信完整示例(重点)
TCP通信的流程很清晰:
- 服务端:创建socket → 绑定IP和端口(bind) → 开始监听(listen) → 等待连接(accept) → 收发数据
- 客户端:创建socket → 连接服务端(connect) → 收发数据
2.1 TCP服务端代码 server.py
import socket
# 1. 创建TCP套接字 SOCK_STREAM代表TCP
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 绑定地址与端口,0.0.0.0代表监听本机所有网卡
HOST = "0.0.0.0"
PORT = 8888
server_socket.bind((HOST, PORT))
# 3. 开启监听,参数为允许等待的最大连接数
server_socket.listen(5)
print(f"服务端启动成功,监听端口:{PORT}")
# 4. 循环等待客户端接入
while True:
# accept()阻塞,直到有客户端连接
conn, addr = server_socket.accept()
print(f"新客户端接入:{addr}")
# 接收客户端数据,缓冲区大小1024字节
data = conn.recv(1024)
if not data:
conn.close()
continue
print("收到客户端消息:", data.decode("utf-8"))
# 向客户端发送响应
resp = "服务端已收到你的消息!"
conn.send(resp.encode("utf-8"))
# 关闭当前客户端连接
conn.close()
2.2 TCP客户端代码 client.py
import socket
# 创建TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务端地址
HOST = "127.0.0.1"
PORT = 8888
client_socket.connect((HOST, PORT))
# 发送数据,socket只能传输字节流,字符串需要encode编码
msg = "Hello Socket!"
client_socket.send(msg.encode("utf-8"))
# 接收服务端返回消息
recv_data = client_socket.recv(1024)
print("收到服务端响应:", recv_data.decode("utf-8"))
# 关闭套接字
client_socket.close()
运行测试
- 终端先运行服务端:
python server.py - 新开终端运行客户端:
python client.py
输出效果:
服务端控制台:
服务端启动成功,监听端口:8888
新客户端接入:('127.0.0.1', 51234)
收到客户端消息: Hello Socket!
客户端控制台:
收到服务端响应: 服务端已收到你的消息!
注意几个要点:
- Socket传输只有bytes字节流,字符串必须用
encode()编码,接收后需用decode()解码。 127.0.0.1只能本机访问。想让局域网其他设备连进来,服务端需绑定0.0.0.0,客户端填写服务端的局域网IP。- 端口不能被其他程序占用,否则会报
OSError。
三、UDP通信示例
UDP不需要建立连接,省去了listen和accept的步骤,收发更轻量,速度也更快。
UDP服务端 udp_server.py
import socket
# SOCK_DGRAM 代表UDP
udp_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_server.bind(("0.0.0.0", 9999))
print("UDP服务端启动,端口9999")
while True:
data, addr = udp_server.recvfrom(1024)
print(f"来自{addr}消息:{data.decode('utf-8')}")
udp_server.sendto("UDP收到!".encode("utf-8"), addr)
UDP客户端 udp_client.py
import socket
udp_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_client.sendto("UDP测试消息".encode("utf-8"), ("127.0.0.1", 9999))
data, addr = udp_client.recvfrom(1024)
print("服务端回复:", data.decode("utf-8"))
udp_client.close()
四、常见踩坑总结
- 编码报错:收发时忘记encode/decode,中文尤其容易乱码。统一用utf-8,别省略。
- 端口占用:换个端口,或者关闭占用端口的进程。
- 客户端连不上:防火墙拦截、IP写错、服务端没绑定
0.0.0.0,逐一排查。 - recv阻塞卡死:TCP连接断开后,recv会返回空字节,代码里需加判断。
- 单次recv收不全大数据:缓冲区有限,传输大文件要循环接收。
五、进阶拓展方向
原生Socket实现的是点对点短连接通信,后续想玩更复杂的,可以往以下方向走:
- 用多线程/多进程处理多个客户端并发连接。
- IO多路复用 select / selectors 实现高并发服务。
- 基于Socket搭建简易聊天室、文件传输工具。
- 封装协议头,自定义通信数据包格式。
- 异步网络编程 asyncio socket。
- 第三方框架:Twisted、gevent。
结束语
Socket是网络编程的基石,HTTP、WebSocket这些高级协议,底层其实都离不开它。把原生socket模块吃透,再看各种网络框架,底层逻辑会清晰很多。本篇的代码都是最简可运行版本,建议手动敲一遍,跑一遍,理解会更深入。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
网络安全工程师考证指南:从入门到实战的完整路径
围绕“选证书—补基础—备考与报名—实战验证—避坑进阶”梳理网络安全工程师考证路径,兼顾国内常见认证与国际认证的定位差异,帮助零基础及转行读者明确学习顺序,并把证书准备与真实安全岗位能力结合起来。
JupyterLab 进阶配置:从插件管理到环境隔离的完整指南
JupyterLab 的强大不仅在于 Notebook 本身,更在于其可扩展的架构与灵活的工作流。本文深入解析插件机制、内核切换原理及工作区管理策略,提供一套标准化的配置与排查流程。通过理解扩展权限、内核通信机制及布局保存逻辑,开发者能够建立稳定的开发环境,并快速定位插件失效、内核错乱或布局丢失等常
AI Agent工作原理:工具调用、记忆与任务规划
从一次用户指令出发,拆解AI Agent如何理解目标、规划任务、调用工具、管理记忆并验证结果,帮助读者建立可落地的Agent工作模型,同时识别常见失控与失败原因。
Flask项目结构设计:蓝图、配置与扩展管理
从可维护性和可扩展性出发,系统梳理 Flask 项目的结构设计,重点解决蓝图拆分、配置管理、扩展初始化与模块依赖等实际问题,并通过验证与避坑建议帮助读者建立适合中小型项目演进的架构。
- 热门数据榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2026-10-10 15:31
2026-10-10 15:26
2026-10-10 15:21
2026-10-10 15:16
2026-10-10 15:11
2026-10-10 15:06
2026-10-10 15:01
2026-10-10 14:56
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

