我在这里的第一个问题,所以放轻松。
这是我的情况:
我正在使用 Twisted 框架在 Python 中创建一个网络游戏。游戏通过一个端口上的 TCP 连接到主服务器(连接保持活动状态以进行身份验证),然后您可以在另一个端口上加入网络服务器。目前,网络和主服务器程序都在同一台远程机器上运行。
到目前为止,几乎所有东西都运行良好,至少在通过 Python 解释器运行游戏时。在这种情况下,连接到两台服务器总是可以正常工作。问题仅在使用 py2exe 为客户端创建独立可执行文件后才开始。
在我的开发机器上,运行可执行文件将允许我启动游戏,连接到主服务器并对其进行身份验证。Wireshark 告诉我连接保持活动状态,并且定期轮询正在被确认。到现在为止还挺好。但是当我尝试连接到网络游戏服务器时(相邻端口上的第二个 TCP 连接),结果不一致。大约一百分之一的时候它会起作用。其余时间大约是 50/50 之间什么都不做(Twisted 不会触发任何回调),或者返回“用户超时导致连接失败”。半秒内出错。
有趣的是,Wireshark 甚至没有为这些失败的连接“尝试”显示任何传出的 TCP 数据包,无论它们是返回错误还是什么都不做。
然后它变得更奇怪了,因为当我在另一台测试机器上运行完全相同的游戏客户端可执行文件时,一切正常。那里没有任何连接问题,它每次都能正常工作。两台机器都运行原始的 Windows 7,开发机器是专业版,另一个是家庭版。
我还应该指出,在本地运行游戏服务器,即使在与客户端相同的机器上(连接到“localhost”)对这个问题没有影响 - 症状保持不变。
那么这里可能发生了什么?