[Twisted-Python] cannot get simple example to run

Hello everyone. Try as I might I cannot get a very simple example to run. I basically want a server that accepts connections, and periodically issues messages to all clients. The docs for twisted.word says things are in flux so I would rather avoid that and just use a LineReceiver. However right now I can't get anything to work. I start the server and it seems to be happy to sit around and accept connections. However when I run the client it quits (without saying why) and no connection is made. Any help would be very much appreciated. Here's the code, log messages below that. Thanks! Kevin ################################################## # server.py ################################################## import sys from twisted.internet.protocol import log from twisted.internet.protocol import Factory from twisted.internet.protocol import Protocol from twisted.internet import reactor class Echo(Protocol): def connectionMade(self): sys.stderr.write('Server connectionMade\n') self.factory.numProtocols = self.factory.numProtocols+1 if self.factory.numProtocols > 100: self.transport.write("Too many connections, try later") self.transport.loseConnection() def connectionLost(self, reason): sys.stderr.write('Server connectionLost\n') self.factory.numProtocols = self.factory.numProtocols-1 def dataReceived(self, data): sys.stderr.write('Server dataReceived\n') self.transport.write(data) factory = Factory() factory.protocol = Echo log.startLogging(file('server.log', 'w')) sys.stderr.write('Server starting...\n') # 8007 is the port you want to run under. Choose something >1024 reactor.listenTCP(9010, factory) reactor.run() sys.stderr.write('Server done\n') ################################################## # client.py ################################################## import sys from twisted.internet import reactor from twisted.internet.protocol import log from twisted.internet.protocol import Protocol from twisted.internet.protocol import ClientCreator from twisted.internet.protocol import ClientFactory class Greeter(Protocol): def sendMessage(self, msg): sys.stderr.write('Client sendMessage\n') self.transport.write("MESSAGE %s\n" % msg) class GreeterClientFactory(ClientFactory): def startedConnecting(self, connector): sys.stderr.write('Client startedConnecting\n') def buildProtocol(self, addr): sys.stderr.write('Client connected\n') g = Greeter() reactor.callLater(1, g.sendMessage, "This is sent in 1 second") reactor.callLater(2, g.sendMessage, "This is sent in 2 second") reactor.callLater(3, g.sendMessage, "This is sent in 3 second") return Greeter() def clientConnectionLost(self, connector, reason): sys.stderr.write('Client connectionLost: ' + reason + '\n') def clientConnectionFailed(self, connector, reason): sys.stderr.write('Client connectionFailed: ' + reason + '\n') log.startLogging(file('client.log', 'w')) sys.stderr.write('Client connecting...\n') f = GreeterClientFactory() reactor.connectTCP("localhost", 9010, f) sys.stderr.write('Client done\n') ################################################## # client.log ################################################## 2008/04/28 12:38 -0400 [-] Log opened. 2008/04/28 12:38 -0400 [-] Client connecting... 2008/04/28 12:38 -0400 [-] Starting factory <__main__.GreeterClientFactory instance at 0x8354d8c> 2008/04/28 12:38 -0400 [-] Client startedConnecting 2008/04/28 12:38 -0400 [-] Client done ################################################## # server.log ################################################## 2008/04/28 14:41 -0400 [-] Log opened. 2008/04/28 14:41 -0400 [-] Server starting... 2008/04/28 14:41 -0400 [-] twisted.internet.protocol.Factory starting on 9010 2008/04/28 14:41 -0400 [-] Starting factory <twisted.internet.protocol.Factory instance at 0xb7cc18cc>

On Mon, 28 Apr 2008 15:23:47 -0400, klok000@gmail.com wrote:
Hello everyone. Try as I might I cannot get a very simple example to run. I basically want a server that accepts connections, and periodically issues messages to all clients. The docs for twisted.word says things are in flux so I would rather avoid that and just use a LineReceiver. However right now I can't get anything to work.
I start the server and it seems to be happy to sit around and accept connections. However when I run the client it quits (without saying why) and no connection is made. Any help would be very much appreciated. Here's the code, log messages below that. Thanks!
[snip]
################################################## # client.py ################################################## [snip] sys.stderr.write('Client connecting...\n')
f = GreeterClientFactory() reactor.connectTCP("localhost", 9010, f)
sys.stderr.write('Client done\n')
After reactor.connectTCP, you may want to call reactor.run. :)
################################################## # client.log ################################################## 2008/04/28 12:38 -0400 [-] Log opened. 2008/04/28 12:38 -0400 [-] Client connecting... 2008/04/28 12:38 -0400 [-] Starting factory <__main__.GreeterClientFactory instance at 0x8354d8c> 2008/04/28 12:38 -0400 [-] Client startedConnecting 2008/04/28 12:38 -0400 [-] Client done
Jean-Paul

On Mon, Apr 28, 2008 at 3:23 PM, <klok000@gmail.com> wrote:
Hello everyone. Try as I might I cannot get a very simple example to run. I basically want a server that accepts connections, and periodically issues messages to all clients. The docs for twisted.word says things are in flux so I would rather avoid that and just use a LineReceiver. However right now I can't get anything to work.
I start the server and it seems to be happy to sit around and accept connections. However when I run the client it quits (without saying why) and no connection is made. Any help would be very much appreciated. Here's the code, log messages below that. Thanks!
You're not running the reactor in the client example. -- Christopher Armstrong International Man of Twistery http://radix.twistedmatrix.com/ http://twistedmatrix.com/ http://canonical.com/

On 07:23 pm, klok000@gmail.com wrote:
I start the server and it seems to be happy to sit around and accept connections. However when I run the client it quits (without saying why) and no connection is made. Any help would be very much appreciated. Here's the code, log messages below that. Thanks!
You forgot "reactor.run()", so effectively the program never starts :).
participants (4)
-
Christopher Armstrong
-
glyph@divmod.com
-
Jean-Paul Calderone
-
klok000@gmail.com