
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