[Twisted-Python] Newbie Problem

Damon Kohler damonkohler at yahoo.com
Tue Sep 12 22:11:30 MDT 2006


This is probably something simple. I'm having some trouble with this little bit
of code below. I start it up once as a server, then a second time as the client
connecting to localhost. However, it never actually seems to connect. Both
sides just wait indefinitely. I'm a bit stuck as to how to debug this, so if
someone has a solution for me and could tell me how I would have figured it
out, that would be great!

Thanks,
Damon

import sys
import optparse

import zope.interface

from twisted.spread import pb
from twisted.internet import reactor
from twisted.internet import interfaces
from twisted.python import util


class ConsoleInput(object):
    zope.interface.implements(interfaces.IReadDescriptor)
    
    def fileno(self):
        return 0

    def connectionLost(self, reason):
        print "Lost connection because %s" % reason

    def doRead(self):
        d = self.root.callRemote("echo", sys.stdin.readline().strip())
       
    def setRoot(self, root):
        print "got root"
        self.myEchoer = Echoer()
        self.root = root
        self.root.callRemote('GiveReference', self.myEchoer)

    def logPrefix(self):
        return 'ConsoleInput'


class Echoer(pb.Root):
    def remote_echo(self, st):
        print 'echoing:', st
        return st

    def remote_GiveReference(self, ref):
        self.client_ref = ref

def main():
    parser = optparse.OptionParser()
    parser.add_option('--host', dest='host', help='Host to connect to.')
    options, args = parser.parse_args()

    ci = ConsoleInput()
    reactor.addReader(ci)

    if options.host:
        host = options.host
        factory = pb.PBClientFactory()
        print "Connecting to %s..." % host
        reactor.connectTCP(host, 8789, pb.PBClientFactory())
        d = factory.getRootObject()
        d.addCallback(ci.setRoot)
        d.addErrback(lambda reason: "error %s" % reason.value)
        d.addCallback(util.println)
    else:
        print "Listening..."
        root = Echoer()
        factory = pb.PBServerFactory(root)
        reactor.listenTCP(8789, factory)

    reactor.run()

if __name__ == '__main__':
    main()


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 




More information about the Twisted-Python mailing list