Python Twisted - 服务器通信

时间:2012-11-29 07:10:28

标签: python twisted

我有一个奇怪的问题。基本上,我现在遇到的问题是处理两个相互连接的不同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具有与类名和端口完全相同的源代码保存。

1 个答案:

答案 0 :(得分:1)

您已覆盖dataReceived。这意味着永远不会调用lineReceived,因为LineReceiver的{​​{1}}实现最终会调用dataReceived,而您永远不会调用它。

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