socket编程基础:TCP/UDP服务器客户端实现
请用Python socket模块分别实现一个简单的TCP回显服务器和客户端,并说明TCP与UDP编程的关键区别。
回答
苦行僧
TCP回显服务器:
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server:
server.bind(('127.0.0.1', 8888))
server.listen(5)
conn, addr = server.accept()
with conn:
data = conn.recv(1024)
conn.sendall(data) # 回显
TCP客户端:
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client:
client.connect(('127.0.0.1', 8888))
client.sendall(b'Hello')
data = client.recv(1024)
TCP vs UDP关键区别:
| 特性 | TCP | UDP |
|------|-----|-----|
| socket类型 | SOCK_STREAM | SOCK_DGRAM |
| 连接 | 面向连接(connect/accept) | 无连接 |
| 可靠性 | 可靠传输、重传、顺序保证 | 不可靠,可能丢包乱序 |
| 数据边界 | 流式,无边界 | 保留消息边界(sendto/recvfrom)|
| 适用 | HTTP、数据库、文件传输 | 实时音视频、DNS、游戏 |
UDP服务端使用socket.SOCK_DGRAM,无需listen/accept,直接recvfrom()接收和sendto()发送。