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

Ed *_*nce 1 python sockets

摘要

我正在向python udp监听器添加一个功能,该功能向其收到的设备发回确认.在我的情况下,目前该设备是localhost,但将来将是一个MT4000遥测设备.

问题

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

('127.0.0.1', 57121)

我理解这意味着源IP是127.0.0.1即localhost,57121表示数据已通过的端口.我的目标是将这些数据分开,以便发回确认.

我的解决方案

我收到数据的代码如下:(s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)) data, addr = s.recvfrom(1024)

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

sourceIp = addr[3:-9]
Run Code Online (Sandbox Code Playgroud)

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

sourceIp = 127.0.0.1

但它只输出这个: ()

我现在的想法是,这实际上并不是一个字符串,因此拆分方法不起作用.还有另一种分裂方式或转换方法吗?谢谢.

Vin*_*gis 7

('127.0.0.1', 57121)是一个元组,不可变的容器,有两个项目.

要获取ip/port,请执行以下操作:

data, addr = s.recvfrom(1024)
ip = addr[0]
port = addr[1]
Run Code Online (Sandbox Code Playgroud)

或者你可以像你一样解压缩它data, addr = ...:

data, addr = s.recvfrom(1024)
ip, port = addr
Run Code Online (Sandbox Code Playgroud)

或者,即使是做空的方法:

data, (ip, port) = s.recvfrom(1024)
Run Code Online (Sandbox Code Playgroud)