Python 套接字在 LAN 上工作,但不能在 Wifi 上工作

标签 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)

我在计算机 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()

我已经接近找到解决方案了。 Windows 正在丢弃 UDP 数据包。我用 netstat -s -p UDP 命令检查过。每当发送计算机发送 UDP 数据包时,接收错误都会增加。现在我只需要弄清楚为什么错误地接收了数据包。

编辑 我已经在其他电脑上测试过了。有用。我已经关闭了它不起作用的计算机上的防火墙,但仍然无法弄清楚是什么过滤掉了 UDP 数据包。

最佳答案

检查服务器计算机 Wifi 网络上的信任设置。根据this article来自微软:

For example, a program that accepts inbound connections from the Internet (like a file sharing program) may not work in the Public profile because the Windows Firewall default setting will block all inbound connections to programs that are not on the list of allowed programs.

我相信默认情况下 Wifi 网络是放在公共(public)配置文件中的,所以这听起来像是这里发生的事情。由于您知道数据包到达那里是正常的(来自 wireshark),最可能的解释是防火墙拒绝为您提供它。

另一种方法是将 python 添加到 allowed programs list如果您可能不完全信任网络。

关于Python 套接字在 LAN 上工作,但不能在 Wifi 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27722790/

相关文章:

c - 在一个端口上接收 UDP 请求并通过另一个端口发送响应

c - 本地主机 UDP 协议(protocol)丢失数据的可能原因?

python - 带有 pymc 的蒙特卡罗马尔可夫链

python - 图表js条形图上方的空间

c++ - Winelib 能否将 DLL 直接链接到 ELF 可执行文件?

c - Golang CGO 无法使用转换后的字符串

java - 互联网上的 UDP。它是如何工作的?

python - Plone 4 : Passing arguments to view class (BrowserView)

python - 在 python 中,如果文件以一组特定的字母开头,我如何从循环中排除文件?

java - 由于 EXCEPTION_ACCESS_VIOLATION,我公司的软件无法运行