# 服务端代码 (server.py)
import cv2, socket, numpy as np
s = socket.socket()
s.bind(('0.0.0.0', 9999))
s.listen(1)
conn, addr = s.accept()
while True:
data = b''
while len(data) < 4: # 接收4字节长度前缀
data += conn.recv(4096)
size = int.from_bytes(data[:4], 'big')
while len(data) < 4 + size: # 接收完整帧数据
data += conn.recv(4096)
frame = np.frombuffer(data[4:4+size], dtype=np.uint8)
frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
cv2.imshow('Server', frame)
if cv2.waitKey(1) == 27:
break # ESC退出
conn.close()
# 客户端代码 (client.py)
import cv2, socket, numpy as np
s = socket.socket()
s.connect(('服务端IP', 9999))
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
# 编码为JPEG并添加4字节长度前缀
_, buf = cv2.imencode('.jpg', frame)
data = buf.tobytes()
size = len(data).to_bytes(4, 'big')
s.sendall(size + data)
if cv2.waitKey(1) == 27:
break # ESC退出
cap.release()
s.close()