无法通过Python中的Twisted库外部连接服务器
我正在尝试在我的服务器上运行一个简单的TCP服务器。我使用的是在Twisted示例页面上的echoserv.py和echoclient.py。当我在服务器上运行echoserv.py时,我可以通过在echoclient.py中使用以下内容顺利连接:
reactor.connectTCP('localhost', 8000, factory) <- for a localhost connection
reactor.connectTCP('192.168.0.250', 8000, factory) <- for a lan connection
但是当我尝试通过互联网远程连接时,我在echoclient.py中使用以下代码:
reactor.connectTCP('mydomain.com', 8000, factory)
然而,当我尝试运行echoclient.py时,会有一个暂停,然后我收到:
connection failed: User timeout caused connection failure.
我知道这和我的域名有关,因为当我使用一个随机的域名时,我得到:
connection failed: Connection was refused by other side: 111: Connection refused.
我的所有端口都已正确配置为8000端口,我确定不是我的互联网服务提供商在阻止这些端口(我可以在其他应用程序中随意使用随机端口)。我也尝试过使用8000以外的端口,但没有成功。如果有帮助的话,这是我路由器页面上的端口转发设置:
[X] tcp_server 192.168.0.250 TCP 8000/8000 always edit delete
你知道为什么会发生这种情况吗?
2 个回答
1
你试过以下方法吗?
- 对运行服务器的机器的IP地址进行端口扫描,以确认端口是否开放。简单的[谷歌搜索][1]会给你很多选择。
- 如果端口显示是开放的,试着用telnet进行远程连接,而不是使用twisted客户端脚本。有些系统防火墙会在应用层进行拦截(比如Windows XP),可能会在你不知情的情况下阻止你的外发连接。
4
当你设置路由器进行端口转发,把外部连接引导到你的内部服务器时,这个功能其实只有在连接的客户端(也就是那些想要连接的人)真的在你的网络外部时才有效,也就是说,他们是从互联网来的。你在自己网络内部是无法使用这个功能的,它对你来说是无效的。你可能会觉得这个功能没有用,但实际上它是有效的,至少对外部的用户来说是这样。
你可以在谷歌上搜索端口转发测试工具来验证这一点。这个链接(谷歌的第一个搜索结果)运行得很好:http://www.yougetsignal.com/tools/open-ports/