Python套接字可通过LAN工作,但不能通过Wifi工作

use*_*466 5 python windows udp

我有一个在python中实现的简单UDP服务器:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("",10005))

while True:
    data = sock.recv(1024)
Run Code Online (Sandbox Code Playgroud)

我在计算机A上运行此代码.在这两种情况下,我从计算机B发送UDP命令:

  1. A和B都通过LAN电缆连接到本地网络中的路由器.
  2. A和B都通过Wifi连接到路由器.

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()
Run Code Online (Sandbox Code Playgroud)

我已接近找到解决方案.Windows正在丢弃UDP数据包.我用netstat -s -p UDP命令检查了一下.每当发送计算机发送UDP数据包时,接收错误就会增加.现在我只需弄清楚错误地接收数据包的原因.

编辑 我已在其他计算机上测试过它.有用.我已经在计算机上切换了防火墙,但它无法正常工作,但仍然无法弄清楚什么是过滤掉UDP数据包.

Ric*_*h L 1

检查服务器计算机 Wifi 网络上的信任设置。根据微软的这篇文章:

例如,接受来自 Internet 的入站连接的程序(如文件共享程序)可能无法在公共配置文件中运行,因为 Windows 防火墙默认设置将阻止与不在允许程序列表中的程序的所有入站连接。

我相信默认情况下 Wifi 网络被放入公共配置文件中,所以听起来就像这里发生的情况一样。既然您知道数据包可以正常到达那里(来自wireshark),最可能的解释是防火墙拒绝为您传递它。

如果您可能不完全信任网络,另一种方法是将 python 添加到允许的程序列表中。