我是一个python新手,我必须创建一个连接4台机器的Truco(巴西游戏,如果你不知道)游戏。我用类来做,用pickle把它转移到一个socket。根据我能在网上找到的,这应该工作,但我的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)
这是我的send方法:
def sent(self, m, machine):
PORT = 5054
dest = (machine._host, PORT)
self._socketsnd.sendto(m._dados,dest)
m._dados是self。Dados =泡菜。转储(不同,2)
有人能帮忙吗?
您可能想要读取套接字,然后执行recv = machine._socketrcv.recvfrom(1024)[0]
socket.recvfrom(bufsize[, flags])
从套接字接收数据。返回值是一对(string, address),其中string是表示接收到的数据的字符串,address是发送数据的套接字的地址。有关可选参数flags的含义,请参阅Unix手册页recv(2);默认为0。(地址的格式取决于地址族-见上文)
recvfrom
返回一个包含数据和地址的元组(更多信息可以在套接字文档中找到)。与其他语言不同,Python允许您在赋值语句的左侧放置一个元组,因此如果您这样做:
data, (address, port) = machine._socketrcv.recvfrom(1024)
可以访问单独命名变量中需要的所有信息。在您的例子中,您只需要数据:
pickle.loads(data)