I can't figure out why LineReceived never gets called in the client. Any ideas? --------------------------------------------------------------------- Client Code: from twisted.internet.protocol import ClientFactory from twisted.protocols.basic import LineReceiver from twisted.internet import reactor import sys class EchoClient(LineReceiver): end="GoodBye" def connectionMade(self): self.sendLine("Hello, world!") def lineReceived(self, line): print "receive:", line if line==self.end: self.transport.loseConnection() class EchoClientFactory(ClientFactory): protocol = EchoClient def clientConnectionFailed(self, connector, reason): print 'connection failed:', reason.getErrorMessage() reactor.stop() def clientConnectionLost(self, connector, reason): print 'connection lost:', reason.getErrorMessage() reactor.stop() def main(): factory = EchoClientFactory() reactor.connectTCP('localhost', 8000, factory) reactor.run() if __name__ == '__main__': main() -------------------------------------------------------------------------------- Server Code: from twisted.internet.protocol import Protocol, Factory from twisted.internet import defer, reactor from twisted.python import threadable from twisted.internet import threads threadable.init(1) import time class GetData: def Do(self): time.sleep(3) return 'Done' ### Protocol Implementation # This is just about the simplest possible protocol class Echo(Protocol): def dataReceived(self, data): reactor.callLater(0, self.RunThread, data) def PrintData(self,data): self.transport.write('GoodBye') print "Sent GoodBye" self.transport.loseConnection() # Call reactor.stop() for testing so I don't have to kill -9 the server reactor.stop() def RunThread(self,data): c = GetData() d = threads.deferToThread(c.Do) d.addCallback(self.PrintData) def main(): f = Factory() f.protocol = Echo reactor.listenTCP(8000, f) reactor.run() if __name__ == '__main__': main()