【发布时间】:2017-01-16 05:09:50
【问题描述】:
今天我在尝试 Python 的套接字模块,但我无法从一台 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 防火墙中添加出站规则,允许特定端口的所有连接。
问题可能是什么?是因为防火墙吗?如果不是,那我是不是做错了?
【问题讨论】:
-
你试过更改端口号吗?
-
你能ping通另一台电脑吗?他们在同一个IP网络上吗?相同的子网掩码?
-
@Jean-FrançoisFabre 奇怪,在端口 3020 上将数据包从 PC2 发送到 PC1 有效,但从 PC1 到 PC2 无效。
-
@ade1e 两个 IPv4 地址的第一个数字:
xxx.xx相同,但最后一个数字不同。 -
第一次尝试不使用防火墙 - 关闭防火墙。如果它可以工作,那么您将在防火墙中搜索正确的规则。它可能不仅需要出站规则,还需要入站规则,并且不仅需要端口 3020。
标签: python sockets udp firewall