Python套接字上的数据严重损坏

时间:2019-05-07 03:41:00

标签: python sockets opencv

我已经设置了客户端和服务器程序,使其可以在localhost上正常运行,当通过ip传送时,它们几乎完全无用。服务器发送视频数据,客户端通过本地主机完美接收它,但是一旦进行了实际测试,它每隔一秒钟只能获得大约1个有用的帧。其余部分则向上严重拉伸。最糟糕的例子>> https://imgur.com/a/RtGVNNh

在将try / except放入客户端文件之前,它将播放一帧彩色的竖线,然后在抱怨所给图像没有高度或宽度的情况下崩溃。

cameraClient.py

import socket
import cv2
import numpy as np

ip = "insert ip"
port = 4001
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(3)

sock.connect((ip, port))

while True:
    try:
        buff = sock.recv(921664)

        nparr = np.frombuffer(buff, np.uint8)
        newFrame = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
        cv2.imshow("s", newFrame)

    except:
        pass

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cameraServer.py

import cv2
import socket

host = ''
port = 4001
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print("Preparing webcam.")
vid = cv2.VideoCapture(0)
print("Webcam ready, waiting for client connection.")

sock.bind((host, port))
sock.listen(3)
conn, addr = sock.accept()

while True:
    if vid.isOpened():
        empty, frame = vid.read()
        data = cv2.imencode('.jpg', frame)[1].tostring()

        conn.send(data)

当然这不是一个无法解决的问题。即使我必须完全改变我发送和接收数据的方式,这也是完全可以接受的。如果您可以帮助我了解它为什么这样做以及如何解决它,那将是很好的。

0 个答案:

没有答案