Python: 如何将recvfrom()函数接收到的地址转换为字符串?
总结
我正在给一个Python的UDP监听器添加一个功能,这个功能是向发送数据的设备发送确认信息。目前这个设备是本机(localhost),但将来会变成一个MT4000遥测设备。
问题
我使用recvfrom()函数来接收来自发送数据设备的数据和源地址。这个函数返回的是一对值(字符串,地址),其中字符串表示接收到的数据,地址是发送数据的套接字的地址。我们现在关注的是地址。返回的地址是:
('127.0.0.1', 57121)
我明白这意味着源IP是 127.0.0.1,也就是本机,而 57121 是发送数据所用的端口。我的目标是把这些数据分开,以便发送确认信息。
我的解决方案
我用来接收数据的代码是:
(s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM))
data, addr = s.recvfrom(1024)
到目前为止,我尝试了这种分割数据的方法:
sourceIp = addr[3:-9]
我原以为这样可以把字符串分开,得到:
sourceIp = 127.0.0.1
但实际上只输出了:()
我现在的想法是,这实际上并不是一个字符串,所以这种分割方法不管用。有没有其他的分割方法或者转换方法?谢谢。
1 个回答
10
('127.0.0.1', 57121)
是一个元组,这是一种不可改变的容器,里面有两个元素。
要获取 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)