我们最近将Windows计算机从Windows 7升级到Windows 10,从而完成了操作系统的全新安装。当它运行Windows 7时,我们托管了几个简单的python套接字服务器,以便网络上的另一台Linux计算机可以与Windows计算机上的某些驱动程序接口。该系统(将套接字服务器绑定到开放端口并监听响应)在升级之前的一年中运行良好。
当我们在Windows计算机上更新操作系统时,以前在两台计算机之间建立SOCK_STREAM服务器连接的相同python脚本停止运行。当要求连接时,连接只是超时。
是否有人知道任何可能影响套接字在Windows 10上监听的能力的更改和/或对此问题的任何修复?在大量的挖掘工作中,我们未能发现任何明显的修正。
这是在每台计算机上运行的代码的基本示例。
Windows 10:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("XX.XX.XX.XX", XXXXX))
s.listen()
while True:
conn, addr = s.accept()
try:
conn.settimeout(3)
data = conn.recv(1024)
except:
break
if not data:break
# more code follows to process the data, etc.
在Linux上:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(10) # this timeout can change, and it just hangs indefinitely when removed
s.connect(("XX.XX.XX.XX",XXXXX))
上面引用为一系列X的IP和端口可用,并且不会引发任何错误。
答案 0 :(得分:0)
这是一个防火墙问题(就像@yorodm所说的),所以不是Python代码造成了错误,而是计算机。
我无法为Linux计算机提供解决方案(我假设它运行正常,并且防火墙允许传入连接),但是我可以为Windows 10计算机提供解决方案。
这是一个解决方案:
转到“开始”,然后启动Cortana。键入“允许应用程序通过Windows防火墙”,然后点击“ Enter”键。单击“更改设置”按钮,然后在“ python.exe”旁边,选中左侧的框,如果尚未启用,则选中python.exe右侧的两个框。