Sockets (accept): Welche Klasse verweden?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
ede
User
Beiträge: 20
Registriert: Samstag 18. November 2006, 10:38

Dienstag 18. Dezember 2007, 22:10

nabend leute,

ich habe mir mal eine eigene Socketklasse geschrieben, da die methoden send und recv überschrieben, und dann jeweils einen Server und einen Client abgeleitet, in etwa so:

Code: Alles auswählen

import socket

class MySocket:
    
    def __init__(self):
        self.sock = # tcp socket erstellen
        
    def __del__(self):
        self.sock.close()

    def send(self, msg):
        # daten in einer schleife versenden

    def recv(self):
        # daten empfangen

class MyServer(MySocket):
    
    def __init__(self, host="localhost", port=1234):
        # self.sock (MySocket) methoden bind, listen, accept aufrufen

class MyClient(MySocket):
     # connected und sendet daten an den server (anderes modul)
jetzt zum problem: ich rufe accept in MyServer.__init__ auf und erhalte dann als rückgabeparameter einen neuen socket, die verbindung mit dem client. dieser ist aber jetzt wieder vom type socket.socket, wenn ich auf den jetzt recv aufrufe, wird automatisch socket.socket.recv verwendet, ich will aber das eigene (MySocket.recv, das ja auch noch in den abegeleiteten klassen existiert). wie muss ich da vorgehen, bzw wo muss ich den socket.socket in eine meiner eigenen Klassen umwandeln, und in welche dann? der socket, den ich da erhalte (unabhängig von welcher klasse er nun ist) ist ja jedenfalls kein serversocket mehr sonderen ähnelt dann schon eher einem Clientsocket.

Ein anderes Problem, das mir noch aufgefallen ist: MySocket.__del__ kann ja nicht aufgerufen werden, wenn ich die konsole gewaltsam beendet wird (windows cmd -> Schließen [X] oder so). hab gelesen, dass ein close-Aufruf schon drin sein sollte, da der Socket auf der anderen Seite sonst hängen bleiben könnte oder ähnliches. gibts da nen trick wie ich den socket doch noch zumachen kann?

Vielen Dank für eure Bemühungen schonmal im Voraus :D
Antworten