【问题标题】:Python: How to convert the address recieved from a recvfrom() function to a string?Python:如何将从 recvfrom() 函数接收到的地址转换为字符串?
【发布时间】:2014-08-27 10:12:54
【问题描述】:

总结

我正在向 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

但它只输出这个:()

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

【问题讨论】:

    标签: python sockets


    【解决方案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)
    

    【讨论】:

    • 太棒了,正是我想要的,太棒的答案:D
    • 谢谢你,你帮了我很多!
    猜你喜欢
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 2017-08-25
    • 2015-05-23
    • 2021-10-15
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    相关资源
    最近更新 更多