第一台计算机不接收从第二台计算机

时间:2017-01-14 14:48:40

标签: python sockets udp firewall

今天我正在尝试Python的套接字模块,但是我无法从一台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上执行其他脚本,可以正常工作。但是,从一台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防火墙中添加出站规则,允许特定端口的所有连接。

问题是什么?是因为防火墙吗?如果不是那么我这样做不正确吗?

1 个答案:

答案 0 :(得分:0)

发现问题:

<强>短

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

<强>长

我在IPv4寻找无线局域网适配器ipconfig地址与socket.gethostbyname(socket.gethostname())中的地址相同,但事实证明 socket.gethostbyname(socket.gethostname())将提供VirtualBox Host-Only Network的地址。

当我ping了VM IPv4时,它会给出超时请求,但是在ping了真正的本地IPv4之后它确实有效。

修正:

When oracle virtualbox are set, How to get local ip address in python