Skip to main content
 首页 » 编程设计

Python:如何将从 recvfrom() 函数收到的地址转换为字符串

2025年05月04日20birdshome

总结

我正在向 python udp 监听器添加一个功能,该监听器将确认发送回它正在接收的设备。就我而言,目前该设备是本地主机,但将来会是 MT4000 遥测设备。

问题

我正在使用 recvfrom() 函数从发送数据的设备接收数据和源地址。返回值是一对 (string, address),其中 string 是表示接收到的数据的字符串,address 是发送数据的套接字的地址。这个问题我们关注地址。地址正在返回

('127.0.0.1', 57121)

我理解这意味着源 IP 是 127.0.0.1 即本地主机,而 57121 代表数据已发送的端口。我的目标是拆分这些数据以便发回确认。

我的解决方案

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

到目前为止,我已经尝试过这种拆分数据的方法:

sourceIp = addr[3:-9] 

我的印象是应该这样拆分字符串:

sourceIp = 127.0.0.1

但是它只输出这个:()

我目前的想法是,这实际上不是一个字符串,因此拆分方法不起作用。是否有另一种拆分方式或转换方法?谢谢。

请您参考如下方法:

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

要获取 ip/port 这样做:

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)