2015-02-06 5 views
0

저는 Python 및 Twisted에 약간의 문제가 있습니다. 나는 서버에 연결하여 메시지를 보내는 클라이언트를 작성하기 시작했다. 서버는 잠시 후에 다시 돌아온다. 이것은 모두 잘되고 좋은 일이지만, 나는 내 프로그램이 '기다리는'길을 필요로한다. (나는 가능한 한 느슨한 용어로 기다린다. 나는 원자로의 주 루프를 막는 차단 작용 때문에 기다릴 수 없다는 것을 안다.) 사용자 입력 용으로 입력하고 서버에 입력 한 내용을 모두 보냅니다. 트위스트 사이트의 stdiodemostdin 코드 샘플을 살펴 보았지만 여전히 나에게 많은 의미를 부여하지는 않습니다. 표준 입력을 가져 와서 서버로 보내는 방법에 대한 분명한 예를 들어 주면 누구든지 나에게 알릴 수 있습니까?서버에 연결 한 후 주 반응기를 차단하지 않고 사용자 입력을 기다리고 서버에 보내십시오.

편집 : 나의 현재 코드는

from twisted.internet import stdio 
from twisted.protocols import basic 
from twisted.internet.protocol import Protocol, Factory 
from twisted.internet import reactor 
from twisted.internet.protocol import ClientFactory 
from twisted.protocols.basic import LineReceiver 
from twisted.internet import stdio 


class Echo(basic.LineReceiver): 
    from os import linesep as delimiter 

    def connectionMade(self): 
     self.transport.write('>>> ') 

    def lineReceived(self, line): 
     self.sendLine('Echo: ' + line) 
     self.transport.write('>>> ') 

class EchoClientFactory(ClientFactory): 
    protocol = Echo 

    def clientConnectionLost(self, connector, reason): #reason why etc etc. Consider 'resume connection' on timer, to deal with willing/forced peers leaving 
     print "[!] Connection lost " 

    def clientConnectionFailed(self, connector, reason): 
     print "[!] Connection failed " 

    def connect_to(HOST, PORT): 
     factory = EchoClientFactory() 
     reactor.connectTCP(HOST, PORT, factory) #connect to $ on port 

def main(): 
    stdio.StandardIO(Echo()) 
    host = "192.168.221.134" 
    port = 8000 
    reactor.callLater(0, connect_to, HOST=host, PORT=port) 
    reactor.run() 

if __name__ == '__main__': 
    main() 

나는 또한, 서버 측에서, 그것은 전송 '>>>'그 추가해야 stdio를 구현하기 위해 노력하는 데. 또한 이것은 모두 Linux 시스템에서 실행됩니다.

답변

1

기본적으로 반응기에 stdin을 이벤트 소스로 추가해야합니다. 즉, 링크 된 stdin.py 예제가하는 일입니다 - 그것의 의견에 말한대로 :

원자로를 차단하지 않고 표준 입력 에서 한 번에 한 줄을 읽는 예.

lineReceived() 콜백이 호출되면 서버로 회선을 보낼 수 있습니다. 예제 코드를 사용하면 매우 간단합니다.

+0

불행히도 예제 코드가 실제로 서버에 무엇을 보내도록 구현되어야하는지는 잘 모르겠습니다. 나는 stdin.py가하는 것과 같은 방식으로 그것을 구현하려고 시도했지만, 터미널에 똑바로 다시 출력하는 것만 같다. – Brewer

+0

코드를 보여주십시오. –

+0

코드가 추가되었습니다. 그것을 붙여 넣는 데 어려움이 있었다면 줄 단위로 처리해야합니다. – Brewer