2014-08-27 42 views
1

摘要

我正在向python udp监听器添加一个功能,该监听器向它正在接收的设备发回一个确认。就我而言,目前该设备是本地主机,但未来将是MT4000遥测设备。Python:如何将recvfrom从recvfrom()函数转换为字符串?

问题

我使用recvfrom的()功能,以接收从所述设备发送数据的数据和源地址。返回值是一对(字符串,地址),其中字符串是表示接收数据的字符串,地址是发送数据的套接字的地址。这个问题我们专注于地址。该地址被返回

('127.0.0.1', 57121)

我明白这意味着源腹膜内是127.0.0.1即本地主机,而表示该数据已通过发送端口。我的目标是将这些数据分开以发回确认。

我的解决办法

代码我已经接收到该数据是这样的: (S = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)) data, addr = s.recvfrom(1024)

到目前为止我曾尝试这种方法分手了数据:

sourceIp = addr[3:-9] 

我的印象中,这应该拆分字符串作为这样的:

sourceIp = 127.0.0.1

但它确实只输出这样的:()

我当时的想法是,这实际上不是一个字符串,因此分裂的这种方法是行不通的。还有另一种分裂方式或转换方法吗?谢谢。

回答

3

('127.0.0.1', 57121)是一个tuple,有两个项目的不可变容器。

要获得IP /端口做这样的:

data, addr = s.recvfrom(1024) 
ip = addr[0] 
port = addr[1] 

还是喜欢你data, addr = ...做,你可以解开它:

data, addr = s.recvfrom(1024) 
ip, port = addr 

或者更短的方法:

data, (ip, port) = s.recvfrom(1024) 
+0

辉煌,正是我所寻找的,辉煌的答案:D – 2014-08-27 10:32:02

+0

谢谢你,你帮了我很多! – frank17 2016-10-23 12:44:10