1

私は奇妙な問題を抱えています。基本的に、私が現在抱えている問題は、互いに接続されている 2 つの異なる LineReceiver サーバーを処理することです。本質的に、サーバー A に何かを入力する場合、サーバー B に出力を表示する必要があります。また、その逆も行いたいと考えています。ポートがそれぞれ(12650と12651)であるServerA.pyとServerB.pyの2つの異なるソースファイルで2つのサーバーを実行しています(&シェルスクリプトを介して異なるプロセスでも実行しています)。また、telnetを使用して各サーバーに接続しています。

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() で行われた接続に送信する代わりに、正確な文字列を吐き出してしまいます。正確になぜこれが起こっているのですか?私は周りを見回して、出くわした各ソリューションを試しましたが、正しく機能しないようです。奇妙なことに、私の友人は本質的に同じことを行っており、彼はいくつかの作業結果を得ていますが、これは、この奇妙な現象の原因を突き止めようとするために私が考えることができる最も単純なプログラムです.

いずれにせよ、要点は、serverAに入れた入力がserverBに表示されることを期待していることです。

注: サーバー A とサーバー B のソース コードはまったく同じで、クラス名とポートが保存されています。

4

1 に答える 1

1

をオーバーライドしdataReceivedました。これは、最終的に を呼び出すのはの実装であり、あなたがそれを呼び出すことはないlineReceivedため、 が呼び出されることはないことを意味します。LineReceiverdataReceivedlineReceived

オーバーライドするだけでlineReceived、期待どおりに機能するはずです。

于 2012-11-29T09:38:47.550 に答える