2010-12-07 5 views
0

C'est la première fois que j'écris ici. Je m'excuse si mon anglais n'est pas si bon. Je veux configurer un serveur UDP simple en Python en utilisant Twisted. L'interface graphique est basée sur QT4 et je dois exécuter l'application dans les environnements Windows ou Linux.Serveur UDP asynchrone avec Twisted et QT4

Le code est assez simple:

from twisted.internet.protocol import DatagramProtocol 
from twisted.internet import reactor, stdio 
from twisted.protocols.basic import LineReceiver 

class UDPLineReceived(DatagramProtocol): 
    def datagramReceived(self, data, (host, port)): 
    print "received %r from %s:%d" % (data, host, port) 

reactor.listenUDP(int(self.inPort.text()), UDPLineReceived()) 
reactor.run() 

Il reçoit les paquets envoyés sur le port défini, mais il se bloque l'interface utilisateur. Donc, je me demande comment je devrais changer mon code pour le faire fonctionner en mode "asynchrone".

Si vous avez besoin d'autres informations, s'il vous plaît dites-moi!
Merci à l'avance
Mark

Répondre

1

Utilisez le PyQt4 integration reactor pour laisser Twisted et Qt fonctionnent en collaboration:

app = QApplication(...) 
import qt4reactor 
qt4reactor.install() 

from twisted.internet.protocol import DatagramProtocol 
from twisted.internet import reactor, stdio 
from twisted.protocols.basic import LineReceiver 

class UDPLineReceived(DatagramProtocol): 
    def datagramReceived(self, data, (host, port)): 
     print "received %r from %s:%d" % (data, host, port) 

reactor.listenUDP(int(self.inPort.text()), UDPLineReceived()) 
reactor.run() 
+0

Merci. Juste une question: le fichier README de qt4reactor dit de déballer le dossier dans le PYTHONPATH. Mais devrais-je le décompacter à la racine Python26 ou dans le Lib \ SitePackages où est également le dossier tordu? – Mark

+0

Peu importe. Ça fonctionne bien. Je vous remercie! – Mark

Questions connexes