Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取错误Pickle数据被截断。使用套接字和openCV_Python_Opencv_Sockets_Pickle - Fatal编程技术网

Python 获取错误Pickle数据被截断。使用套接字和openCV

Python 获取错误Pickle数据被截断。使用套接字和openCV,python,opencv,sockets,pickle,Python,Opencv,Sockets,Pickle,我的程序很简单。服务器将用他的用户名将他的视频发送给客户端。对我来说,用户名发送部分非常重要。当我发送用户名时,会出现错误\u pickle.UnpicklingError:pickle数据被截断 这是我的密码: server.py import socket, cv2, pickle, struct # Socket Create server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host_name = soc

我的程序很简单。服务器将用他的用户名将他的视频发送给客户端。对我来说,用户名发送部分非常重要。当我发送用户名时,会出现错误
\u pickle.UnpicklingError:pickle数据被截断

这是我的密码:

server.py

import socket, cv2, pickle, struct

# Socket Create
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host_name = socket.gethostname()
host_ip = socket.gethostbyname(host_name)
print('HOST IP:', host_ip)
port = 9999
socket_address = (host_ip, port)

# Socket Bind
server_socket.bind(socket_address)

# Socket Listen
server_socket.listen(5)
print("LISTENING AT:", socket_address)
Header_length = 20

# Socket Accept
while True:
    client_socket, addr = server_socket.accept()
    print('GOT CONNECTION FROM:', addr)
    if client_socket:
        vid = cv2.VideoCapture(0)

        while (vid.isOpened()):
            img, frame = vid.read()
            resized_frame = cv2.resize(frame , (920,690))
            a = pickle.dumps(resized_frame)
            username = 'xyz£¬Khajahost'
            client_socket.send(f"{len(bytes(username , 'utf-8')):<{Header_length}}".encode('utf-8') + username.encode('utf-8') )
            message = f"{len(a):<{Header_length}}".encode('utf-8') + a
            client_socket.sendall(message)

            cv2.imshow('TRANSMITTING VIDEO', frame)
            key = cv2.waitKey(1) & 0xFF
            if key == ord('q'):
                client_socket.close()
导入套接字,cv2,pickle,结构 #套接字创建 server\u socket=socket.socket(socket.AF\u INET,socket.SOCK\u流) host_name=socket.gethostname() 主机ip=socket.gethostbyname(主机名) 打印('主机IP:',主机IP) 端口=9999 套接字地址=(主机ip,端口) #套接字绑定 服务器\u套接字.bind(套接字\u地址) #插座监听 服务器\u套接字。侦听(5) 打印(“侦听地址:”,套接字地址) 收割台长度=20 #套接字接受 尽管如此: client\u socket,addr=server\u socket.accept() 打印('从以下地址获得连接',地址) 如果客户端\u套接字: vid=cv2.视频捕获(0) 而(参见isopend()): img,frame=vid.read() 调整大小的_frame=cv2。调整大小(frame,(920690)) a=pickle.dumps(调整大小的\u帧) 用户名='xyz,Khajahost'
client_socket.send(f{len(bytes(username,'utf-8')):这个问题是no的重复,它不一样。我只问了这个问题,这个问题也是我问的。它们是不同的。请检查代码。我在那里提到了用户名。当我发送用户名和图片数据时,它给我一个错误
import socket, cv2, pickle, struct

# create socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host_name = socket.gethostname()
host_ip = socket.gethostbyname(host_name)  # paste your server ip address here
port = 9999
client_socket.connect((host_ip, port))  # a tuple
data = b""
payload_size = struct.calcsize("Q")
while True:
    recieved_data = client_socket.recv(20).decode('utf-8')
    print(recieved_data)
    if not recieved_data:
        continue
    username = client_socket.recv(int(recieved_data)).decode('utf-8')
    print(username , len(username))

    frame_data_length = client_socket.recv(20).decode('utf-8')
    frame_data = client_socket.recv(int(frame_data_length))

    while len(frame_data) < int(recieved_data):
        remainig_data = int(recieved_data) - len(frame_data)
        frame_data += client_socket.recv(remainig_data)

    frame = pickle.loads(frame_data)
    cv2.imshow("RECEIVING VIDEO", frame)
    key = cv2.waitKey(1) & 0xFF
    if key == ord('q'):
        break
client_socket.close()