我有一个奇怪的问题。基本上,我现在遇到的问题是处理两个相互连接的不同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具有与类名和端口完全相同的源代码保存。
答案 0 :(得分:1)
您已覆盖dataReceived
。这意味着永远不会调用lineReceived
,因为LineReceiver
的{{1}}实现最终会调用dataReceived
,而您永远不会调用它。
您只需要覆盖lineReceived
,然后事情应该按预期工作。