第一台计算机没有收到第二台计算机发送的 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
之后它确实起作用了。
修复:
今天我在尝试 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
之后它确实起作用了。