gpt4 book ai didi

python - 如何使用 t.c.telnet 构建端点

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:08 25 4
gpt4 key购买 nike

我的目标是根据 TCP4ClientEndpoint 创建 telnet 客户端作为端点实现。

这是我正在做的:

class TelnetClient( TelnetProtocol ):
...

factory = Factory()
factory.protocol = TelnetClient
point = TCP4ClientEndpoint( reactor, x.x.x.x, 23 )
defer = point.connect( factory )

defer.addCallback( todo )
reactor.run

TelnetClient类处理身份验证、登录、触发命令等。

当我使用这种方法时,我可以读取 dataReceived 的一些输出, 但这是胡言乱语。

telnet 客户端在由 Factory 构造时按预期运行然后 reactor.connectTCP(...)Factory 调用.

我这里做错了什么?

谢谢!

编辑 1 连接 TelnetClientfactory.protocol通过TelnetProtocol

class TelnetClient( TelnetProtocol ):
...

factory = Factory()
factory.protocol = TelnetTransport( TelnetClient )
point = TCP4ClientEndpoint( reactor, x.x.x.x, 23 )
defer = point.connect( factory )

defer.addCallback( todo )
reactor.run

EDIT 2 已解决。最后一 block 是 ClientFactory。

class TelnetClient( TelnetProtocol ):
...

factory = ClientFactory()
factory.protocol = TelnetTransport( TelnetClient )
point = TCP4ClientEndpoint( reactor, x.x.x.x, 23 )
defer = point.connect( factory )

解决这个问题有两个方面。

  1. 因为我们想要一个 telnet 客户端,我们需要确保该协议(protocol)是 TelnetProtocol 的一个实例。 .

  2. 工厂必须是ClientFactory .如果我们查看 twisted.internet.endoints 的来源,我们看到我们传递给端点的工厂包装在 _WrappingFactory 中,它来自 ClientFactory .如果我们传入的这个工厂没有与ClientFactory相同的属性, 然后是 _wrappedFactory当它尝试调用 ClientFactory 的方法时将导致 AttributeErrors

最佳答案

你是对的,connectTCPendpoint.connect 在功能上是相同的(大部分)。

假设 TelnetProtocoltwisted.conch.telnet.TelnetProtocol,这里的问题是 TelnetProtocol 不应该直接连接到TCP 传输,它应该连接到 twisted.conch.telnet.TelnetTransport。您看到的 dataReceived 中的“乱码”是实际的 telnet 协议(protocol)字节,应该由 twisted.conch.telnet.TelnetTransport(这是本身是一个 IProtocol),以便在 TelnetTransport 上调用 enableLocalenableRemote 等方法。

我猜想在您基于connectTCP 的示例中,您可能正在实例化一个TelnetTransport 并设置它的 .protocol 属性指向 TelnetProtocol

基本上,确保您传入的Factory 对象具有完全ClientFactory 相同的protocol 属性 您在 connectTCP 示例中使用。

在未来,也请包括完整的、可运行的代码示例,以便我们可以运行它们并查看会发生什么,而不是猜测 :-)。

关于python - 如何使用 t.c.telnet 构建端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7926110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com