今天我正在尝试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防火墙中添加出站规则,允许特定端口的所有连接。
问题是什么?是因为防火墙吗?如果不是那么我这样做不正确吗?
答案 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