socket.recvfrom函数返回一个元组(python)

时间:2015-05-27 18:56:09

标签: python sockets pickle

我是一个python noobie,我必须创建一个连接4台机器的Truco(brazillian游戏,如果你不知道)游戏。我正在使用类,使用pickle将其传输到套接字。根据我在网上找到的内容,这应该可行,但我的recv是一个元组,我不能使用元组的负载。我试图将它转换为列表,然后转换为字符串,但没有任何作用!

def recv(self, machine):
    PORT = 5054
    HOST = ''
    orig = (socket.gethostbyname(HOST), PORT)
    machine._socketrcv.bind(orig)
    recv = machine._socketrcv.recvfrom(1024)
    return pickle.loads(recv)

这是我的发送方式:

def sent(self, m, machine):
    PORT = 5054
    dest = (machine._host, PORT)
    self._socketsnd.sendto(m._dados,dest)

其中m._dados是self.dados = pickle.dumps(dados,2)

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您可能想要阅读socket,然后执行recv = machine._socketrcv.recvfrom(1024)[0]

之类的操作
  

socket.recvfrom(bufsize[, flags])

     

从套接字接收数据。返回值是一对(字符串,地址),其中string是表示接收数据的字符串,address是发送数据的套接字的地址。有关可选参数标志的含义,请参见Unix手册页recv(2);它默认为零。 (地址格式取决于地址族 - 见上文。)

答案 1 :(得分:1)

recvfrom返回包含数据和地址的元组(更多信息可在socket documentation中找到)。与其他一些语言不同,Python允许你在赋值的左侧放置一个元组,所以如果你做这样的事情:

data, (address, port) = machine._socketrcv.recvfrom(1024)

您将可以在单独的命名变量中访问所需的所有信息。在您的情况下,您只需要数据:

pickle.loads(data)