在 Python 中,可以使用 socket
模块来进行 TCP(Transmission Control Protocol)通信。通常,TCP 通信分为 服务器端 和 客户端,
服务器需要:
pythonimport socket
# 创建 TCP 套接字(IPv4,流式套接字)
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定 IP 和端口
server_socket.bind(('0.0.0.0', 12345)) # 监听所有网络接口上的 12345 端口
# 开始监听,最大等待连接数 5
server_socket.listen(5)
print("服务器启动,等待客户端连接...")
while True:
# 接受客户端连接
client_socket, addr = server_socket.accept()
print(f"客户端 {addr} 连接成功!")
# 读取数据(一次最多接收 1024 字节)
data = client_socket.recv(1024)
print(f"收到数据: {data.decode()}")
# 发送回复
client_socket.sendall(b'Hello from server!')
# 关闭连接
client_socket.close()
客户端需要:
pythonimport socket
# 创建 TCP 套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
server_address = ('127.0.0.1', 12345) # 连接本地服务器
client_socket.connect(server_address)
# 发送数据
client_socket.sendall(b'Hello, server!')
# 接收数据(最多 1024 字节)
data = client_socket.recv(1024)
print(f"收到服务器回复: {data.decode()}")
# 关闭连接
client_socket.close()
如果要支持多个客户端同时连接,可以使用 多线程 或 多进程 来处理每个连接,例如:
pythonimport socket
import threading
def handle_client(client_socket, addr):
print(f"客户端 {addr} 已连接")
data = client_socket.recv(1024)
print(f"收到数据: {data.decode()}")
client_socket.sendall(b'Hello from server!')
client_socket.close()
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('0.0.0.0', 12345))
server_socket.listen(5)
print("服务器启动,等待客户端连接...")
while True:
client_socket, addr = server_socket.accept()
thread = threading.Thread(target=handle_client, args=(client_socket, addr))
thread.start()
socket.settimeout(5)
限制接收超时时间。socket.setblocking(False)
让 accept()
或 recv()
不阻塞主线程。while
循环持续与客户端交互。socket.SOCK_DGRAM
进行无连接数据传输。