使用 Python 编写一个基础的 TCP 客户端与服务器程序,请给出具体实现。
考察说明
考查候选人用 Python 实现 TCP 网络通信的基本能力,包括 socket 编程、连接建立与数据收发。
回答思路
- 【回答框架 1】服务器端使用 socket.socket(socket.AF_INET, socket.SOCK_STREAM) 创建 TCP socket,bind 到指定地址和端口,listen 设置监听队列,accept 接受客户端连接。
- 【回答框架 2】客户端同样创建 socket,connect 到服务器地址和端口,建立连接后通过 send 和 recv 进行数据收发,注意 recv 可能只收到部分数据,需循环接收直到完整。
- 【回答框架 3】服务器处理每个客户端连接时,可循环 recv 数据并 send 响应,处理完关闭连接;为支持多客户端,可使用多线程或 select 机制,但基础实现可单线程顺序处理。
- 【回答框架 4】注意设置 socket 超时或使用非阻塞模式避免阻塞,关闭连接时调用 close 释放资源,可使用 with 语句或 try-finally 确保关闭。
- 【回答框架 5】示例代码需包含服务器端和客户端两个脚本,服务器监听本地端口如 8888,客户端连接后发送消息并接收回显。
- 【关键点 1】TCP 是面向连接的流协议,recv 需循环处理粘包和半包。
- 【关键点 2】服务器 accept 返回新 socket 用于通信,监听 socket 继续接受新连接。
- 【关键点 3】使用 bind 绑定地址和端口,listen 设置最大等待连接数。
- 【关键点 4】客户端 connect 建立连接,send 和 recv 需处理返回值。
- 【关键点 5】关闭 socket 释放资源,避免资源泄漏。
- 【易错点 1】recv 可能一次收不全数据,需循环接收直到预期长度或连接关闭。
- 【易错点 2】多客户端场景下单线程顺序处理会阻塞,需使用多线程或异步。
- 【易错点 3】未设置超时可能导致程序永久阻塞。