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()