编辑代码

# 服务端代码 (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()