我如何在Python中连接UDP端口?
和其他人一样,我也可以说“我试过所有方法!”其实我真的试过。我在StackOverflow上到处找答案,尝试了所有的解决办法,但都没有效果。无论如何,我至少想让Python打印一些代码,才能继续开发下去。
我想从我的Garry's Mod服务器接收UDP数据包(logaddress_add MyIP:7131),但我似乎没有收到任何数据包。大概率不是路由器防火墙的问题,因为我可以在另一台电脑上使用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的端口上使用logaddress_add(比如7135)时,它不会有任何反应。Wireshark也完全没有反应,什么日志都不显示。但是,当你把HLSW改成使用你刚刚添加的端口(7135)时,Wireshark突然就能接收到数据流,包括我想要的控制台数据。这是不是HLSW在改变某种配置?
2 个回答
4
你需要用 sock.connect(('127.0.0.1', 7131)) 来连接,而不是用 bind。
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...'的地址,结果又显示出来了。