내 목표는 TCP4ClientEndpoint
구현마다 끝점으로 텔넷 클라이언트를 만드는 것입니다.t.c.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
오프 일부 출력을 읽을 수 등 인증, 명령을 발사, 로그인을 처리하지만, 지 버리 쉬야.
Factory
으로 구성되고 reactor.connectTCP(...)
으로 구성 될 때 텔넷 클라이언트가 예상대로 작동합니다 (Factory
).
내가 여기서 잘못하고있는 것은 무엇입니까?
감사합니다.
EDIT 1 해결 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 통해 factory.protocol
TelnetClient
에 연결. 마지막 부분은 ClientFactory였습니다.
class TelnetClient(TelnetProtocol):
...
factory = ClientFactory()
factory.protocol = TelnetTransport(TelnetClient)
point = TCP4ClientEndpoint(reactor, x.x.x.x, 23)
defer = point.connect(factory)
이 문제를 해결하는 데는 두 가지 문제점이있었습니다. 우리는 텔넷 클라이언트를 원하기 때문에
, 우리는 프로토콜이
TelnetProtocol
의 인스턴스가 있는지 확인해야합니다.공장 출하시는
당신이 맞아요ClientFactory
이어야합니다.twisted.internet.endoints
의 출처를 보면 끝점에 전달하는 팩토리가_WrappingFactory
으로 바뀌 었으며 이는ClientFactory
의 자손입니다. 우리가 통과 할이 공장은ClientFactory
과 같은 속성이없는 경우가connectTCP
및endpoint.connect
기능적으로 동일한 지 ClientFactory
오른쪽, TelnetTransport를 사용하는 connectTCP 버전에서. 이 질문을 게시하기 전에 끝점과 동일한 구현을 시도했습니다. 내 편집을 확인하십시오. 문제는 Nonetype에 connectionLost가 없다는 것을 나타내는 AttributeError가 발생한다는 것입니다. 나는 당신이 아직 제안한 것처럼 특성을 비교하지 않았다. 내 코드가 지금은 너무 해킹되었습니다. 아침에 아침에 실행되는 예제를 게시하십시오. – sbartell
Factory 객체가 ClientFactory와 동일한 속성을 갖도록 보장 할 때 문제가 해결되었습니다. 편집을 확인하십시오. – sbartell
도움에 감사드립니다! – sbartell