我是一个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)
有人可以帮忙吗?
答案 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)