我有一个在python中实现的简单UDP服务器:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("",10005))
while True:
data = sock.recv(1024)
我在计算机A上运行此代码。 我在这两种情况下从计算机B发送UDP命令:
UDP数据包在情况1(LAN电缆)中接收,但在情况2(通过Wifi)中不接收。 在这两种情况下,Wireshark都会在计算机A上显示收到的数据包。 有什么想法吗?
操作系统:Windows
客户端计划:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(char,("192.168.1.107",10005))
sock.close()
我已接近找到解决方案。 Windows正在丢弃UDP数据包。我查看了netstat -s -p UDP
命令。每当发送计算机发送UDP数据包时,接收错误就会增加。现在我只需弄清楚错误地接收数据包的原因。
修改 我在其他电脑上测试过它。有用。我已经在计算机上切换了防火墙,但它仍无法解决UDP数据包的过滤问题。
答案 0 :(得分:0)
检查服务器计算机的Wifi网络上的信任设置。根据微软的this article:
例如,一个接受来自的入站连接的程序 Internet(如文件共享程序)可能无法在Public中运行 配置文件,因为Windows防火墙默认设置将阻止所有 到不在允许列表中的程序的入站连接 程序
我相信默认情况下,Wifi网络会被置于公开个人资料中,所以这听起来像是在这里发生的事情。既然你知道数据包正好(形成wireshark),最可能的解释是防火墙拒绝为你提供它。
如果你可能并不完全信任网络,可以选择将python添加到allowed programs list。