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" 并且您正在尝试解开它。