[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
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,
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