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

时间:2014-12-31 15:01:49

标签: 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连接到路由器。
  3. 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数据包的过滤问题。

1 个答案:

答案 0 :(得分:0)

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

  

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

我相信默认情况下,Wifi网络会被置于公开个人资料中,所以这听起来像是在这里发生的事情。既然你知道数据包正好(形成wireshark),最可能的解释是防火墙拒绝为你提供它。

如果你可能并不完全信任网络,可以选择将python添加到allowed programs list