Toon posts:

[Python/Threads]serverthread stoppen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben op het moment bezig met een klein server-client programmatje met een Tkinter GUI. Wanneer ik de applicatie start wordt er een socket geopend word waarop geluisterd word naar clienten. Om de server en de GUI tegelijk te laten draaien maak ik gebruik van threads om het luisteren naar clienten niet het programma te laten blokkeren.

Ik wil nu dat wanneer ik de GUI afsluit de server-thread beeindigd wordt zodat de socket weer vrijgemaakt word maar ik heb geen idee hoe ik dit moet doen.

De server-thread wordt binnen de gui class gestart op de volgende manier
Python:
1
2
3
(...)
serverlib.connectionThread().start()
(...)


Dit wordt er dan uitgevoerd:
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class connectionThread(threading.Thread):
     # the thread for connecting to server
     def __init__(self):
    threading.Thread.__init__(self)

     def run(self):
        ipadr = socket.gethostbyname_ex(socket.gethostname())
        ipadr = self.ipadr[2][0]
        .port = 9000
        try:
           sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        except socket.error:
            print "Socketerror: Can't open socket"
        sock.bind((self.ipadr, self.port))
        sock.listen(1)
        print "server started"
        clientsocket, clientadress = sock.accept()
        print "Verbinding vanaf: "+clientadress[0]
        while 1:
            data = clientsocket.recv(12)
            print data[:10]
        sock.close()


Enig idee hoe ik de serverthread kan stoppen?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 10-05 05:42
Het is wat lomp, maar wat ik meestal doe is de socket globaal beschikbaar maken en die afsluiten als de thread moet eindigen; dan retourneert de recv-call namelijk meteen.

Het alternatief is gebruik maken van een timeout en eens in de zoveeltijd checken of het al tijd is om af te sluiten.

Verwijderd

Topicstarter
Ok het is gelukt, stom dat ik hier zelf niet aan heb gedacht :)