Pickle Key 错误 "Y" 使用套接字
Pickle Key error "Y" using socket
我正在尝试向我的客户端发送一个字典,它在服务器端是 fin,但是当它开始对字典进行 unpickling 时,它出现了错误 KeyError: 'Y'
。
为什么?
这是我的代码:
client.py:
import socket, pickle
s = socket.socket()
s.connect(("localhost", 10000))
def userDump():
s.sendall("userdump")
d = s.recv(1024)
return pickle.loads(d)
print userDump()
s.close()
server.py:
import pickle, socket
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
address = 'localhost'
port = 10000
s.bind((address, port))
s.listen(5)
while True:
c, clientaddress = s.accept()
c.send("You're Connected")
d = c.recv(1024)
if d == "userdump":
u = {"hello":"hi", "hi":"hello"}
print u
c.send(pickle.dumps(u))
c.close()
"You're connected" 消息在您的客户端中与 pickle 连接当然无济于事。从服务器代码中删除 send
似乎可以使您的程序正常工作。
pickle 协议依赖于版本。可能是您在客户端和服务器上使用了不同的 Python / pickle 版本吗?在那种情况下,select 一个低协议版本,如 docs.
中明确解释的那样
或者使用 JSON 或 Pyro
(O,确实,首先进行 holdenweb 建议的更正...)
您的函数 userDump()
应更正为:
def userDump():
d = s.recv(1024)
s.sendall("userdump")
d = s.recv(1024)
return pickle.loads(d)
在您的代码中,您在 d
中收到 "You're Connected"
并且您正在尝试解开它。
我正在尝试向我的客户端发送一个字典,它在服务器端是 fin,但是当它开始对字典进行 unpickling 时,它出现了错误 KeyError: 'Y'
。
为什么?
这是我的代码:
client.py:
import socket, pickle
s = socket.socket()
s.connect(("localhost", 10000))
def userDump():
s.sendall("userdump")
d = s.recv(1024)
return pickle.loads(d)
print userDump()
s.close()
server.py:
import pickle, socket
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
address = 'localhost'
port = 10000
s.bind((address, port))
s.listen(5)
while True:
c, clientaddress = s.accept()
c.send("You're Connected")
d = c.recv(1024)
if d == "userdump":
u = {"hello":"hi", "hi":"hello"}
print u
c.send(pickle.dumps(u))
c.close()
"You're connected" 消息在您的客户端中与 pickle 连接当然无济于事。从服务器代码中删除 send
似乎可以使您的程序正常工作。
pickle 协议依赖于版本。可能是您在客户端和服务器上使用了不同的 Python / pickle 版本吗?在那种情况下,select 一个低协议版本,如 docs.
中明确解释的那样或者使用 JSON 或 Pyro
(O,确实,首先进行 holdenweb 建议的更正...)
您的函数 userDump()
应更正为:
def userDump():
d = s.recv(1024)
s.sendall("userdump")
d = s.recv(1024)
return pickle.loads(d)
在您的代码中,您在 d
中收到 "You're Connected"
并且您正在尝试解开它。