Socket mit Threading

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
TrayserCassa
User
Beiträge: 97
Registriert: Donnerstag 2. Mai 2013, 19:11

Nabend alle Miteinander :)

Ich habe mal wieder ein kleines Problem .. Ich komme leider nicht mehr drum rum ohne threading zu Arbeiten. Ich benötig nun einen Server-Programm, welches Daten senden, empfangen soll. Dies muss leider gleichzeitig passieren, da ein andere Klasse Daten mit der Datenbank händelt.
Sowas in der Art ^^

Ich schaffe es nicht, das ich den Server so laufen lasse, dass er wirklich vom Hauptthread getrennt ist. Bin auf mehrer Tutorials gestoßen, aber wirklich erfolg hatte ich damit nicht. Ich denke so sieht man schnell was ich im eigentliche sinne meine:

Code: Alles auswählen

import socket
from time import sleep
from threading import Thread


class Server_thread(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.daemon = True
        self.hold_session = True
        self.data = None

        print("starte Server")

        _sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        _sock.bind(("", 18))
        _sock.listen(1)

        while self.hold_session:
            connection, self.client_address = _sock.accept()
            print(self.hold_session)
            print("Session mit: ", self.client_address)
            self._recive(connection)
            connection.close()

    def _recive(self, connection):
        while True:
            self.data = connection.recv(1024)
            if not self.data:
                print(self.data)
                break

    def get_address(self):
        return self.client_address

    def get_data(self):
        return self.data

    def close(self):
        self.hold_session = False


def main():
    serv = Server_thread()
    serv.start()
    while True:
        print("sleep")
        sleep(3)
        if serv.data:
            print(serv.get_data())
            serv.close()

    s.close()

if __name__ == "__main__":
    main()
Das ist alles nur zum testen. Über Themen wie "nicht verfügbare Variablen" oder "Sichere Verbindungen mit Socket", habe ich mich nicht Informiert, deshalb brauche ich eigentlich nur Hilfe zum Thema threading :oops:

MfG
Trayser
BlackJack

@TrayserCassa: Die Klasse hat eine Endlosschleife in der `__init__()`, das heisst zum `start()`-Aufruf kommst Du gar nicht erst. Das was ein `Thread` an nebenläufiger Arbeit verrichtet muss in der `run()`-Methode stehen. Das steht aber auch gleich am Anfang in der Dokumentation von `Thread`-Objekten.
TrayserCassa
User
Beiträge: 97
Registriert: Donnerstag 2. Mai 2013, 19:11

Ok never mind .. Da hab ich den Wald, vor lauter Bäume wohl nicht gesehen.

Tut mir leid :oops:
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@TrayserCassa:
Warum das Rad neu erfinden? Für simple Serverangelegenheiten gibt es das SocketServer Framework - https://docs.python.org/2/library/socketserver.html. Tausende Male benutzt und erprobt ;)
Antworten