2010-07-18 14 views

Répondre

15

Appelez reactor.listenTCP et reactor.connectTCP. Vous pouvez avoir autant de types différents de connexions - serveurs ou clients - que vous le souhaitez.

Par exemple:

from twisted.internet import protocol, reactor 
from twisted.protocols import basic 

class SomeServerProtocol(basic.LineReceiver): 
    def lineReceived(self, line): 
     host, port = line.split() 
     port = int(port) 
     factory = protocol.ClientFactory() 
     factory.protocol = SomeClientProtocol 
     reactor.connectTCP(host, port, factory) 

class SomeClientProtocol(basic.LineReceiver): 
    def connectionMade(self): 
     self.sendLine("Hello!") 
     self.transport.loseConnection() 

def main(): 
    import sys 
    from twisted.python import log 

    log.startLogging(sys.stdout) 
    factory = protocol.ServerFactory() 
    factory.protocol = SomeServerProtocol 
    reactor.listenTCP(12345, factory) 
    reactor.run() 

if __name__ == '__main__': 
    main() 
+0

um .. Je ne comprends pas comment utiliser le même code ci-dessus pour se connecter sur le serveur d'écoute, pouvez-vous me éclairer s'il vous plaît? – Marconi

+0

aussi, avez-vous une idée de comment je pourrais utiliser cela en conjonction avec le standardio? Dites, alors que le serveur/client peut accepter/se connecter en arrière-plan, je veux aussi pouvoir entrer des commandes. – Marconi

+0

Le code ci-dessus établit une connexion sortante. C'est ce que fait le connectTCP dans lineReceived. En quoi est-ce différent de ce que vous voulez? Aussi, pour l'utiliser avec stdio, il suffit de créer une instance de twisted.internet.stdio.StandardIO à un moment donné. Comme listenTCP et connectTCP, c'est une source d'événements que vous pouvez créer et coexister avec à peu près n'importe quelle autre source d'événement de Twisted. –