Python 第一台计算机没有';无法接收从第二台计算机发送的UDP数据包

Python 第一台计算机没有';无法接收从第二台计算机发送的UDP数据包,python,sockets,udp,firewall,Python,Sockets,Udp,Firewall,今天我在尝试Python的socket模块,但从一台PC到另一台PC的发送/接收失败 起初,我尝试在一台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.recvf

今天我在尝试Python的socket模块,但从一台PC到另一台PC的发送/接收失败

起初,我尝试在一台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上,可以很好地工作。但是,从一台电脑到另一台电脑不会

每当我在第一台电脑上执行接收方脚本,在第二台电脑上执行发送方脚本时,并没有更新,第一台电脑无法接收数据包

从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数据包

我在寻找
ipconfig
中的无线局域网适配器
IPv4
地址在
socket.gethostbyname(socket.gethostname())
中是相同的,但结果是
socket.gethostbyname(socket.gethostname())
将给出VirtualBox纯主机网络的地址

当我ping VM
IPv4
时,它会发出超时请求,但在ping real local
IPv4
之后,它确实工作了

修正:

您是否尝试更改端口号?是否可以ping其他电脑?它们在同一个IP网络上吗?相同的子网掩码?@Jean-Françoisfare奇怪,在端口3020上将数据包从PC2发送到PC1有效,但从PC1发送到PC2无效。@ade1e两个IPv4地址的第一个数字:
xxx.xx
相同,但最后的数字不同。首先尝试不使用防火墙-关闭防火墙。若它能工作,那个么你们将在防火墙中搜索正确的规则。它可能不仅需要出站规则,还需要入站规则,而且不仅需要端口3020。