2011-10-28 4 views
2

내 목표는 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.protocolTelnetClient에 연결. 마지막 부분은 ClientFactory였습니다.

class TelnetClient(TelnetProtocol): 
    ... 

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

이 문제를 해결하는 데는 두 가지 문제점이있었습니다. 우리는 텔넷 클라이언트를 원하기 때문에

  1. , 우리는 프로토콜이 TelnetProtocol의 인스턴스가 있는지 확인해야합니다.

  2. 공장 출하시는 ClientFactory이어야합니다. twisted.internet.endoints의 출처를 보면 끝점에 전달하는 팩토리가 _WrappingFactory으로 바뀌 었으며 이는 ClientFactory의 자손입니다. 우리가 통과 할이 공장은 ClientFactory과 같은 속성이없는 경우가 connectTCPendpoint.connect 기능적으로 동일한 지 ClientFactory

    당신이 맞아요

답변

1

방법을 (호출하려고 할 때, 다음 _wrappedFactory는 AttributeErrors의 원인이됩니다 대부분).

TelnetProtocoltwisted.conch.telnet.TelnetProtocol이라고 가정하면, 여기에 문제가 TelnetProtocol이 정말 TCP 전송에 직접 연결되어되지 않는 것입니다,는 twisted.conch.telnet.TelnetTransport에 연결하기로했다. dataReceived의 "횡설수설"은 실제 텔넷 프로토콜 바이트이며, (자체는 IProtocol)으로 분석되어 에 enableLocal 및과 같은 메소드를 호출해야합니다.

나는 당신의 connectTCP 기반 예를 들어, 당신은 아마 TelnetTransport를 인스턴스화하고 TelnetProtocol 가리 키도록 .protocol 속성을 설정하는 것을 생각한다.

은 기본적으로 당신이 전달하고있는 Factory 객체가 ClientFactory 당신이 당신의 connectTCP 예에서 사용하고 같은 정확히 같은 속성을 가지고 있는지 확인하십시오.

앞으로는 실행할 수 있고 추측하기보다는 어떤 일이 발생하는지 볼 수 있도록 완전한 실행 가능한 코드 예제를 포함하십시오.

+0

오른쪽, TelnetTransport를 사용하는 connectTCP 버전에서. 이 질문을 게시하기 전에 끝점과 동일한 구현을 시도했습니다. 내 편집을 확인하십시오. 문제는 Nonetype에 connectionLost가 없다는 것을 나타내는 AttributeError가 발생한다는 것입니다. 나는 당신이 아직 제안한 것처럼 특성을 비교하지 않았다. 내 코드가 지금은 너무 해킹되었습니다. 아침에 아침에 실행되는 예제를 게시하십시오. – sbartell

+0

Factory 객체가 ClientFactory와 동일한 속성을 갖도록 보장 할 때 문제가 해결되었습니다. 편집을 확인하십시오. – sbartell

+0

도움에 감사드립니다! – sbartell

관련 문제