第一台计算机没有收到第二台计算机发送的 UDP 数据包

First computer doesn't receive UDP packet sent from Second computer

今天我在尝试 Python 的插座模块,但是我无法从一台 PC 到另一台 PC send/recieve。

起初我尝试在一台 PC 上做所有事情:

接收者:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ip = socket.gethostbyname(socket.gethostname())
port = 5003
s.bind((ip, port))
while True:
    data, addr = s.recvfrom(1024)
    print(data, addr)

发件人:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ip = # I wrote ip manually from socket.gethostbyname(socket.gethostname())
port = 5003
s.sendto("Hello!", (ip, port))

在单台 PC 上,在第一个命令行上执行第一个脚本,在第二个命令行上执行其他脚本,效果很好。但是从一台 PC 到另一台 PC 就不行了。

每当我在第一台 PC 上执行 Receiver 脚本,在第二台 PC 上执行 Sender 脚本时,没有更新,第一台 PC 无法接收数据包。

也可以从 PC2 向 PC1 发送数据包,反之则不行。 操作系统:

PC2 = Windows 8.1 64 位; PC1 = Mac OS X El Capitan 10.11.1 64 位;

我也尝试在 Windows 防火墙中添加出站规则,允许特定端口的所有连接。


可能是什么问题?是不是因为防火墙?如果不是,那我是不是做错了?

发现问题:

:

socket.gethostbyname(socket.gethostname()) 包含 IPv4 VirtualBox 地址。无线 LAN 适配器 IPv4 不同,将接收 UDP 数据包。

:

我正在寻找无线局域网适配器 IPv4 ipconfig 中的地址与 socket.gethostbyname(socket.gethostname()) 中的地址相同,但结果是 socket.gethostbyname(socket.gethostname()) 会给出 VirtualBox Host-Only 网络的地址。

当我 ping VM IPv4 时它会发出超时请求,但在 ping 真正的本地 IPv4 之后它确实起作用了。

修复: