如何在Python中连接到UDP端口?

7

和其他人一样,我也可以说“我已经尝试了一切!” 我确实这样做了。我在StackOverflow上搜索了所有答案,但什么都没有得到。无论如何,在开发这个之前,我至少要让Python打印一些代码。

我想从我的Garry's Mod服务器(logaddress_add MyIP:7131)接收UDP数据包,但我似乎没有收到任何数据包。这很可能不是路由器防火墙的问题,因为我可以在另一台计算机上使用HLSW。我使用了Wireshark,并没有看到来自我的服务器IP的任何数据。我使用了Python解释器/ 编写了一些代码(尽管示例是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进行一些测试,发现它似乎在做某种魔法。当您尝试添加非HLSW(比如7135)的特定端口时,它不会做任何事情。Wireshark完全没有任何反应。不显示任何日志或其他内容。但是,当您将HLSW更改为使用刚刚添加的端口(7135),Wireshark突然获得了数据流,包括我正在获取的控制台数据。这是HLSW在更改的某种配置吗?


2
如果 Wireshark 没有检测到来自服务器的数据包,那么你很可能没有从服务器获取任何数据包。使用套接字而不是 libpcap 进行检测并不能改变这一点。我建议你集中精力弄清楚为什么数据包无法穿过网络。在你可以通过 Wireshark 验证数据包能够传输之前,不要进行任何 Python 相关的操作。 - David Z
如果数据包能够通过(将来),那么这段Python代码是否足够并且可以获取数据? - Tartio
我认为正在进行某种形式的“UDP打洞”。 - Knobik
2个回答

11

虽然不是答案,但以下是可能通向答案的诊断路径。有时候只要知道它确实对别人有用就能帮助自己。

我将以上内容输入了Python控制台,然后在另一个Python控制台中输入了下面的代码:

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

这条信息在原始控制台上弹出。我从另一台机器重复了实验,使用了一个'192.168...'地址,结果它再次弹出。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接