2025-03-09
编程
00
请注意,本文编写于 50 天前,最后修改于 50 天前,其中某些信息可能已经过时。

目录

1. TCP 服务器
2. TCP 客户端
3. 运行方法
4. 进阶:多线程/多进程服务器
多线程 TCP 服务器
5. 其他进阶功能

在 Python 中,可以使用 socket 模块来进行 TCP(Transmission Control Protocol)通信。通常,TCP 通信分为 服务器端客户端

1. TCP 服务器

服务器需要:

  • 绑定一个 IP 和端口
  • 监听并接受客户端的连接
  • 处理数据的收发
python
import 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()

2. TCP 客户端

客户端需要:

  • 连接服务器
  • 发送和接收数据
python
import 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()

3. 运行方法

  1. 先运行服务器,它会等待客户端连接。
  2. 然后运行客户端,它会向服务器发送数据,并接收服务器的响应。

4. 进阶:多线程/多进程服务器

如果要支持多个客户端同时连接,可以使用 多线程多进程 来处理每个连接,例如:

多线程 TCP 服务器

python
import 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()

5. 其他进阶功能

  • 超时设置socket.settimeout(5) 限制接收超时时间。
  • 非阻塞模式socket.setblocking(False)accept()recv() 不阻塞主线程。
  • 长连接:使用 while 循环持续与客户端交互。
  • UDP 通信:使用 socket.SOCK_DGRAM 进行无连接数据传输。