Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回元组的socket.recvfrom函数(python)_Python_Sockets_Pickle - Fatal编程技术网

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

返回元组的socket.recvfrom函数(python),python,sockets,pickle,Python,Sockets,Pickle,我是一个python noobie,我必须创建一个连接4台机器的Truco(巴西游戏,如果你不知道的话)游戏。我用类来做,用pickles把它传输到套接字。根据我在网上找到的信息,这应该是可行的,但是我的recv是一个元组,我不能使用元组中的负载。我尝试将其转换为列表,然后转换为字符串,但没有任何效果 def recv(self, machine): PORT = 5054 HOST = '' orig = (socket.gethostbyname(HOST), POR

我是一个python noobie,我必须创建一个连接4台机器的Truco(巴西游戏,如果你不知道的话)游戏。我用类来做,用pickles把它传输到套接字。根据我在网上找到的信息,这应该是可行的,但是我的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.(u dados是self.dados=pickle.dumps(dados,2)


有人能帮忙吗?

您可能想通读一遍,然后执行类似于
recv=machine的操作。_socketrcv.recvfrom(1024)[0]

socket.recvfrom(bufsize[,flags])

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


recvfrom
返回一个包含数据和地址的元组(更多信息可在中找到)。与其他一些语言不同,Python允许您在赋值的左侧放置元组,因此,如果您执行以下操作:

data, (address, port) = machine._socketrcv.recvfrom(1024)
您可以在单独的命名变量中访问所需的所有信息。在您的情况下,您只需要以下数据:

pickle.loads(data)

返回的
recvfrom
中的第二个元素是一个2元素元组本身,它包含IP地址和建立连接的端口。据我所知,这段代码运行良好。