无法使用Python中的Twisted库从外部连接到服务器

时间:2009-08-22 04:00:24

标签: python tcp twisted port

我正在尝试在我的服务器上运行一个简单的TCP服务器。我在Twisted examples page上使用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,我确定不是我的ISP阻止端口(我可以随时使用随机端口与其他应用程序)。我也试过使用8000以外的端口,但无济于事。如果有帮助,这是我的路由器页面中的端口转发线:

[X] tcp_server            192.168.0.250 TCP 8000/8000    always   edit delete

知道为什么会这样吗?

2 个答案:

答案 0 :(得分:5)

当您对路由器进行编程以将输出端口转发到入站服务器时,它实际上只有在客户端(尝试连接的人)真正位于您的网络之外时才会真正起作用。您,从您的网络内部,无法使用它,它将无法为您工作。你会觉得它不起作用,但确实如此。至少对那些外面的人来说。

搜索Port Forwarding Tester at Google以获取相关证明。这个(谷歌的第一个结果)工作得很好:http://www.yougetsignal.com/tools/open-ports/

答案 1 :(得分:1)

您是否尝试过以下操作?

  1. 对运行服务器的计算机的IP执行端口扫描,以确认端口已打开。一个简单的[谷歌搜索] [1]将为您提供很多选择。
  2. 如果端口显示为打开,请尝试通过telnet而不是扭曲的客户端脚本进行远程连接。某些系统防火墙会阻止应用程序级别(例如Windows XP),并且可能会在您意识到的情况下阻止您的传出连接。