【问题标题】:PYTHON - UDP listening without knowing the serverPYTHON - UDP 监听而不知道服务器
【发布时间】:2014-01-17 10:40:21
【问题描述】:

使用 python2.X(适用于 Linux (++) 和 Windows (+)) 我正在尝试创建一个 python 客户端来监听地址和端口。 这些消息是由特定地址和特定端口上的应用程序发送的,但我不知道它是如何编写的。我只是确定它是正常的,它使用 UDP 协议。

所以,我编写了这段代码来接收消息:

import socket
#---socket creation
connexion = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

#---Bind
try:
    connexion.bind(('', 10015))
except socket.error:
    print "connexion failed"
    connexion.close()
    sys.exit()   

#---testing
while 1:
    data, addr = connexion.recvfrom(1024)
    print "messages : ", data

此时运行没有报错,只是代码停在了这一行:

data, addr = connexion.recvfrom(1024)

什么也没有发生...我想我没有连接并且无法接收消息,但我不知道为什么。 我尝试将地址更改为:'192.168.X.X',但它是一样的。

如果有人可以帮助我,那就太好了。我不是很舒服为什么蟒蛇... PS:对不起我的英语。

【问题讨论】:

  • 它并没有停在那条线上。它正在等待大小为 1024 的缓冲区被填满。仅当缓冲区已满时才会返回。确保发送方正在发送并尝试减小缓冲区大小。
  • 我认为你错了。 recvfrom 等待一个数据包,而不是 1024 字节。如果数据包较小,它将与数据包中的数据一起返回。
  • 在python文档中,据说Buff size(1024)是一次接收的最大数据量,所以我像Steffen Ullrich一样思考

标签: python sockets udp listen


【解决方案1】:

我发现了我的问题。我更改了 IP 地址(在文档中,它是 192.168. 00 8. 0 15 ;我尝试像普通地址(192.168.8.15)一样不使用零,然后我收到我的消息

我也改变了我的代码结构:(不知道它是否有影响)我把我的“try:[...] except:[...]”放在了一行

data, addr = connexion.recvfrom(1024)

而不是行:

connexion.bind(('', 10015))

感谢您的帮助;)

【讨论】:

    【解决方案2】:

    您的代码一切正常。您可以使用以下 Python sn-p 验证它是否有效:

    import socket
    connexion = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    connexion.sendto("sending data via udp", ("localhost", 10015))
    

    如果没有显示使用此 sn-p 发送的消息,请检查您的防火墙。要调查您的其他应用程序是否(或什么)实际生成,请尝试使用 tcpdump 或 wireshark。

    【讨论】:

    • 我没有尝试这种其他方式来检查它是否可以。这是个好主意。我会尽快尝试的
    猜你喜欢
    • 2019-08-08
    • 2021-11-05
    • 2016-11-06
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    相关资源
    最近更新 更多