Pickle Key错误" Y"使用套接字

时间:2016-08-03 11:09:00

标签: python sockets pickle

我正在尝试向我的客户端发送一个字典,它在服务器端是fin,但是当它取消字典时,它会出现错误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()

3 个答案:

答案 0 :(得分:1)

对于你已经连接的"当然没有帮助。消息正在与客户端中的pickle连接。从服务器代码中删除send似乎可以使您的程序正常运行。

答案 1 :(得分:0)

您的功能userDump()应更正为:

def userDump():

    d = s.recv(1024)
    s.sendall("userdump")
    d = s.recv(1024)    
    return pickle.loads(d)

在您的代码中,您在"You're Connected"中收到了d,而您正试图将其解开。

答案 2 :(得分:-1)

pickle协议取决于版本。可能是你在客户端和服务器上使用不同的Python / pickle版本?在这种情况下,请明确选择低协议版本,如docs中所述。

或者使用JSON或名为Pyro

的东西

(哦,事实上,首先要做出由holdenweb建议的修正......)