首页 文章

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

提问于
浏览
1

摘要

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

问题

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

('127.0.0.1', 57121)

我理解这意味着源I.P是 127.0.0.1 即localhost, 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 回答

  • 4

    ('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)
    

相关问题