【问题标题】:How do I connect to a UDP port in Python?如何在 Python 中连接到 UDP 端口?
【发布时间】:2011-03-20 08:49:03
【问题描述】:

和其他人一样,我可以说“我什么都试过了!”我有点。我查看了整个 StackOverflow,并尝试了所有答案,但一无所获。无论如何,在进一步开发此代码之前,我至少要让 Python 打印一些代码。

我想从我的 Garry's Mod 服务器 (logaddress_add MyIP:7131) 接收 UDP 数据包,但我似乎没有收到任何这些数据包。这很可能不是路由器防火墙问题,因为我可以在我的另一台计算机上使用 HLSW。我使用过 Wireshark,但没有从我的服务器 IP 中看到任何数据。我使用 Python 解释器 /made some code(尽管示例是 TCP)来查看是否有任何数据——以确保 Wireshark 没有做错任何事情——也没有任何结果。我在做傻事吗?

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('0.0.0.0', 7131))

sock.settimeout(10)
sock.recv(1024)

编辑:我正在用 HLSW 进行一些测试,发现它似乎在做某种魔术。当您尝试 logaddress_add 不是 HLSW 的某个端口(例如 7135)时,它不会做任何事情。 Wireshark 根本不会做任何事情。不显示任何日志,任何东西。但是,当您将 HLSW 更改为使用刚刚添加的端口 (7135) 时,Wireshark 突然获得数据流,包括我正在喷射的控制台数据。是不是某种配置 HLSW 正在改变?

【问题讨论】:

  • 如果 Wireshark 没有检测到来自服务器的任何数据包,您可能没有从服务器获得任何数据包。使用套接字而不是 libpcap 进行检测不会改变这一点。我建议您集中精力找出数据包无法通过网络传输的原因。在您可以(使用 Wireshark)验证数据包是否通过之前,不要使用 Python 做任何事情。
  • 如果数据包确实通过(对于未来),那么 Python 代码是否足以获取数据?
  • 我认为某种“udp 打孔”正在进行中。

标签: python sockets logging udp


【解决方案1】:

(不完全是一个答案,而是一个可能导致答案的诊断路径。有时它有助于知道它实际上对其他人有效。)

我已将上述代码输入到 Python 控制台,然后将以下代码输入到另一个 Python 控制台:

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto('hello', 0, ('127.0.0.1', 7131))

消息在原始控制台上弹出。我在另一台机器上重复了实验,改用“192.168...”地址,它再次弹出。

【讨论】:

    【解决方案2】:

    你需要调用 sock.connect(('127.0.0.1', 7131)) 而不是 bind。

    【讨论】:

      猜你喜欢
      • 2013-11-01
      • 2021-12-30
      • 2011-05-27
      • 2019-01-10
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多