Python Socket编程需严格按序完成五步:创建套接字、绑定地址端口(服务端)、建立连接(客户端connect/服务端listen+accept)、收发字节数据(注意编码与粘包)、正确关闭连接。

Python Socket编程的核心是模拟网络通信的底层过程,它严格遵循TCP/IP或UDP协议的交互逻辑。要实现稳定通信,必须按顺序完成几个关键步骤,缺一不可。
创建套接字(socket)
这是所有Socket操作的起点,需指定地址族和传输协议:
- AF_INET 表示IPv4地址族;AF_INET6 对应IPv6
- SOCK_STREAM 用于TCP(面向连接、可靠);SOCK_DGRAM 用于UDP(无连接、轻量)
- 例如:s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
绑定地址与端口(bind)
仅服务端需要调用,将套接字关联到本机特定IP和端口:
- IP可填'0.0.0.0'(监听所有网卡)或'127.0.0.1'(仅本地)
- 端口号建议选1024以上(避免权限问题),如(‘localhost’, 8080)
- 若端口被占用,会抛出OSError: [Errno 98] Address already in use
建立连接(connect / listen + accept)
客户端和服务端路径不同,但目标一致:形成可通信的数据通道:
立即学习“Python免费学习笔记(深入)”;
- 客户端:直接调用s.connect((host, port))发起三次握手
- 服务端:先s.listen(5)进入监听状态(5为等待队列长度),再用conn, addr = s.accept()阻塞等待并接收新连接
- accept返回的新套接字conn专用于与该客户端通信,原套接字s继续监听其他连接
收发数据(send / recv)
连接建立后,双方通过字节流交换信息,注意编码与缓冲区控制:
- Python 3中send()和recv()只接受bytes类型,字符串需用.encode('utf-8')
- recv(1024)表示最多读取1024字节,实际可能更少,需循环处理完整消息
- TCP无消息边界,应用层需自行定义分隔符(如换行符)或头部长度字段,否则容易粘包
关闭连接时,推荐先s.shutdown(socket.SHUT_RDWR)再s.close(),确保数据发送完毕且资源释放干净。不复杂但容易忽略。



















