SocketServer -> Daten ausserhalb von 'handle' empfangen!

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Gast

Moin!

Ich arbeite gerade mit dem SocketServer-Modul. Der Server funktioniert auch ohne Probleme, nur weiß ich nicht wie ich in der Klasse Daten empfangen kann (außerhalb der handle-Funktion)!?

So weit bin ich zur Zeit:

Code: Alles auswählen

class myServer(SocketServer.BaseRequestHandler):
    def handle(self):
        print "** New connection from %s!" % self.client_address[0]

        # Test-String an den neuen Client senden
        self.request.send("Hallo Welt!")

        #Daten empfangen und ausgeben
        print ">>",self.request.recv(1024)
(Hab den Code ein bisschen gekürzt. Hoffentlich funktioniert er so :oops: )

Also was ist z.B. wenn ich 10 Sekunden nachdem der Client auf meinen Server rauf ist, von ihm eine Nachricht geschickt bekomme?? Da ist ja handle nicht mehr aktiv!
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Dann musst du handle in eine endlosschleife stecken... schaus dir hier aus einem altem Code von mir an. Denn wenn handle nicht mehr aktiv ist, ist der Socket der Verbindung schon wieder geschlossen und somit besteht keine Verbindung mehr.
Oder du verwendest einen anderen Ansatz, nämlich die über Module asyncore und asynchat.

mfg Milan
Gast

Aber wenn ich in handle eine Endlosschleife reinmache, kann ich doch den Request von anderen Clients nicht mehr annehmen oder?
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Dann hast du dir mein Code net genau angeschaut :wink: . Denn das wäre ja wirklich dumm. Also: die Handlerklasse ist nur dafür da, eine einzige Anfrage zu bearbeiten. Für die Entgegennahme von Anfragen ist die Serverklasse zuständig, welche auch Threads oder Forking einsetzen kann. Und genau das mach ich ja auch, wie du ganz unten in den Source sehen kannst :wink: .

mfg Milan
Antworten