【问题标题】:Cannot connect to server externally using Twisted library in Python无法使用 Python 中的 Twisted 库从外部连接到服务器
【发布时间】:2024-01-11 20:47:01
【问题描述】:

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

但是当我尝试通过 Internet 进行远程连接时,我在 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

知道为什么会这样吗?

【问题讨论】:

    标签: python tcp twisted port


    【解决方案1】:

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

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

    【讨论】:

    • 我制作了 YouGetSignal,很高兴你找到了它。 =]
    【解决方案2】:

    您是否尝试过以下方法?

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

    【讨论】:

    • 感谢您推荐端口转发检查器。显然,无论我的 TCP 服务器是否正在运行,端口 8000 似乎都被阻止了。我不明白这一点,因为我在路由器上启用了端口 8000。知道为什么它被阻止了吗?也许是我的 ISP...
    最近更新 更多