1

我有一个奇怪的问题。基本上,我现在遇到的问题是处理两个相互连接的不同 LineReceiver 服务器。本质上,如果我要在服务器 A 中输入一些内容,那么我希望在服务器 B 中出现一些输出。反之亦然。我在两个不同的源文件上运行两台服务器(也通过 & shellscript 在不同的进程上运行它们)ServerA.py 和 ServerB.py,端口分别为(12650 和 12651)。我还使用 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永远不会调用它,因为最终调用的是它LineReceiverdataReceived实现lineReceived,而你永远不会调用它。

您应该只需要覆盖lineReceived,然后事情就会按您的预期工作。

于 2012-11-29T09:38:47.550 回答