无法通过Python中的Twisted库外部连接服务器

1 投票
2 回答
1809 浏览
提问于 2025-04-15 13:47

我正在尝试在我的服务器上运行一个简单的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

你试过以下方法吗?

  1. 对运行服务器的机器的IP地址进行端口扫描,以确认端口是否开放。简单的[谷歌搜索][1]会给你很多选择。
  2. 如果端口显示是开放的,试着用telnet进行远程连接,而不是使用twisted客户端脚本。有些系统防火墙会在应用层进行拦截(比如Windows XP),可能会在你不知情的情况下阻止你的外发连接。
4

当你设置路由器进行端口转发,把外部连接引导到你的内部服务器时,这个功能其实只有在连接的客户端(也就是那些想要连接的人)真的在你的网络外部时才有效,也就是说,他们是从互联网来的。你在自己网络内部是无法使用这个功能的,它对你来说是无效的。你可能会觉得这个功能没有用,但实际上它是有效的,至少对外部的用户来说是这样。

你可以在谷歌上搜索端口转发测试工具来验证这一点。这个链接(谷歌的第一个搜索结果)运行得很好:http://www.yougetsignal.com/tools/open-ports/

撰写回答