Twisted 客户端无法在 Windows 上以不同的方式连接到 Linux/MacOS

Posted

技术标签:

【中文标题】Twisted 客户端无法在 Windows 上以不同的方式连接到 Linux/MacOS【英文标题】:Twisted client failed to connect working differently on Windows to Linux/MacOS 【发布时间】:2017-03-08 12:26:27 【问题描述】:

我在使用 Twisted 端点 connect() 函数时尝试检测失败的连接。奇怪的是,以下在 Windows 下工作并给出了预期的结果,但在 Linux/Mac OS 系统上,我从未看到来自 errBack 的打印语句。是我的代码不正确还是 Windows Twisted 的工作方式与其他代码不同?

class Gateway():
    def __init__(self):

        from twisted.internet.endpoints import TCP4ClientEndpoint
        endpoint = TCP4ClientEndpoint(reactor, 'localhost', 8000)
        authInterfaceFactory = AuthInterfaceFactory(self.__authMsgProcessor)
        d = endpoint.connect(authInterfaceFactory)
        d.addErrback(self.ConnFailed)
        print("WAITING...")

    def ConnFailed(self, msg):
        print("[DEBUG] Errback : 0".format(msg))

Windows 结果

WAITING... [DEBUG] Errback : [Failure instance: Traceback (failure 没有框架)::连接是 被对方拒绝:10061:无法建立连接,因为 目标机器主动拒绝..]

我创建了一个使用端点连接的客户端并立即返回,尽管在与我的代码相同的设置中使用它时它不会:

    self.__networkThread = threading.Thread(target=reactor.run,
        kwargs="installSignalHandlers": False)
    self.__networkThread.start()

    from twisted.internet.endpoints import TCP4ClientEndpoint
    endpoint = TCP4ClientEndpoint(reactor, 'localhost', 8000)
    d = endpoint.connect(authInterfaceFactory)
    d.addErrback(self.ConnFailed)
    d.addCallback(self.ConnOK)

在线程中运行反应器时逻辑是否不正确(我必须按照我的意愿从头开始)?

【问题讨论】:

【参考方案1】:

您不能在一个线程中运行反应器并在另一个线程中使用 Twisted API。除了专门用于与线程交互的几个 API 之外,您必须使用单个线程中的所有 Twisted API。

“我希望它从头开始”听起来不像是使用线程的理由。许多使用 Twisted 的程序在没有线程的情况下“从头开始”启动反应器。

(也请将此作为需要完整示例的绝佳示例。)

【讨论】:

我不确定你的意思。 我添加了一个成功的回调,在 Linux/Mac 上它仍然存在并且什么都不做。我使用 telnet 到 8000 端口并立即出错 $ telnet localhost 8000 正在尝试 ::1... telnet: 连接到地址 ::1: 连接被拒绝 正在尝试 fe80::1... telnet: 连接到地址 fe80::1: 连接被拒绝正在尝试 127.0.0.1... telnet:连接到地址 127.0.0.1:连接被拒绝 telnet:无法连接到远程主机 可能是时候让 tcpdump 和/或 dtrace 参与进来了。

以上是关于Twisted 客户端无法在 Windows 上以不同的方式连接到 Linux/MacOS的主要内容,如果未能解决你的问题,请参考以下文章

在Windows 10上安装Twisted时出错,Python 3.8.0

Python-Twisted:反向代理到 HTTPS API:无法连接

如何在 Windows 上以提升的权限运行脚本

python 网络框架twisted基础学习及详细讲解

在 Windows 上以编程方式获取每个进程的磁盘 io 统计信息?

请帮助我在 Windows 7 Professional 上以 Windows XP 模式添加打印机 [关闭]