Python的socket实现UDP通信较为简单,由于UDP不需要连接,因此收发端各自绑定IP和端口后,直接往目标IP和端口灌数据即可,虽然实现简单、速率高,但不够稳定。而面向连接的TCP协议各方面特点与UDP相反。

  • 服务器端(Server):监听某个端口,等待客户端连接(因此需要先启动服务器端程序)。
  • 客户端(Client):主动连接服务器,发送或接收数据。
  • 一旦连接建立,双方可以互相发送和接收数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 服务器端
import socket

# 创建TCP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP和端口(0.0.0.0 表示监听所有IP)
server_socket.bind(('0.0.0.0', 12345))
# 开始监听(最多允许5个客户端连接)
server_socket.listen(5)

# 客户端完成连接,获取客户端socket和地址
client_socket, addr = server_socket.accept()

try:
while True:
# 与UDP不同,TCP的服务器收发均使用client的socket
data = client_socket.recv(1024) # 接收数据(最多1024字节),与UDP不同
client_socket.sendall(f"Server收到:{data.decode('utf-8')}".encode('utf-8')) # 与UDP不同
except Exception as e:
print("【服务器】发生错误:", e)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 客户端
import socket

# 创建TCP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_ip = '127.0.0.1' # 服务器IP地址和端口
server_port = 12345

# 连接到服务器
client_socket.connect((server_ip, server_port))

try:
while True:
message = input()
client_socket.sendall(message.encode('utf-8'))
response = client_socket.recv(1024)

except Exception as e:
print("【客户端】发生错误:", e)