我正在向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
但它只输出这个: ()
我现在的想法是,这实际上并不是一个字符串,因此拆分方法不起作用.还有另一种分裂方式或转换方法吗?谢谢.
('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)