2012-11-29 2 views
1

나는 기괴한 문제가있어. 기본적으로, 지금 당장 가지고있는 문제는 서로 연결된 두 개의 LineReceiver 서버를 다루는 것입니다. 본질적으로, 서버 A에 무엇인가를 입력한다면 서버 B에 출력이 나타나기를 원합니다. 그리고 그 반대의 경우도 마찬가지입니다. 두 개의 서로 다른 소스 파일에 두 개의 서버를 실행하고 있습니다 (& 셸 스크립트를 통해 서로 다른 프로세스에서 실행). ServerA.py와 ServerB.py는 각각 포트가 (12650과 12651)입니다. 텔넷을 사용하여 각 서버에 연결하고 있습니다.파이썬 트위스트 - 서버 통신

from twisted.internet import protocol, reactor 
from twisted.protocols.basic import LineReceiver 

class ServerA(LineReceiver); 
    def connectionMade(self): 
     self.transport.write("Is Server A\n") 
    def dataReceived(self, data): 
     self.sendLine(data) 
    def lineReceived(self, line): 
     self.transport.write(line) 

def main(): 
    client = protocol.ClientFactory() 
    client.protocol = ServerA 
    reactor.connectTCP("localhost", 12650, client) 

    server = protocol.ServerFactory() 
    server.protocol = ServerA 
    reactor.listenTCP(12651, server) 

    reactor.run() 

if __name__ == '__main__': 
    main() 

내 문제는 sendLine을 사용하는 것입니다. serverA에서 임의의 문자열로 sendLine 호출을 시도하면 serverA는 main()에서 수행 된 연결을 보내지 않고 정확한 문자열을 출력합니다. 정확히이 일이 왜 일어나는 것입니까? 나는 주변을 둘러 보았고 내가 만났던 각각의 해결책을 시도해 보았고 제대로 작동하지 못하는 것 같았다. 기괴한 것은 내 친구가 근본적으로 똑같은 일을하고 있다는 것입니다. 그리고 그는 약간의 결과를 얻지 만 이것은 이것이 이상한 현상의 원인을 찾기 위해 생각할 수있는 가장 단순한 프로그램입니다.

어쨌든 요점은 serverB에 표시 할 입력 내용을 얻으려는 것입니다.

참고 : 서버 A와 서버 B는 클래스 이름과 포트와 완전히 동일한 소스 코드를 저장합니다.

답변

1

dataReceived을 재정의했습니다. 즉, lineReceived은 결국 lineReceived을 호출하는 LineReceiverdataReceived 구현이며, 결코 호출하지 않기 때문에 호출되지 않습니다.

lineReceived을 덮어 쓰기 만하면 원하는대로 작동합니다.

+0

안녕하세요, 재정의 한 dataReceived를 삭제하려고했지만 여전히 동일한 동작을합니다. 서버 B는 sendLine을 사용하여 서버 A로부터 아무 것도 수신하지 않습니다. –

+1

해결책을 찾은 것 같습니다. clients = []와 같은 서버에 연결되어있는 것을 추적하고 연결이 이루어질 때마다 그 목록에 클라이언트의 인스턴스를 추가해야했습니다. 위의 코드가 실제로 데이터를 자체로 보내는 것 같아요. –

관련 문제