socket +Tk -Gui

Fragen zu Tkinter.
Antworten
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo !
Habe mal versucht ein Chat-Client zu programmieren, doch so richtig will es nicht. Konnte es auch nur mit threading loesen, da die after-Methode sich aufhaengt.

Den Code kann man fuer zwei Client nutzen - nur SERVER- und CLIENT_PORT vertauschen, dann laueft es auch auf localhost.

http://paste.pocoo.org/show/83670/

gruss frank
BlackJack

Ich glaube es ist nicht das erste mal, das ich schreibe, das Threads und GUIs sich nicht so vertragen. Das Programm ist kaputt.
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo BlackJack !

Es funktioniert ja - das sich Gui und threading nicht vertragen ist mir auch klar, doch wollte ich ja nur zeigen was ich machen moechte und hoffe auf Anregungen.

gruss frank
BlackJack

Komische Definition von "funktioniert ja" wenn das jederzeit abstürzen kann. Nur weil Dir das noch nicht passiert ist, heisst das nicht, dass es ein robustes Programm ist.
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo BlackJack !

Hatte ja auch nicht vor es so zu lassen, sondern ich wollte mein Problem erklaeren und mein bisherigen Versuche, mit einem teilweise funktionierenden Ansatz aufzeigen.

gruss frank
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo !

Habe mal das threading rausgenommen und das blocken beim Empfang der Daten aufgehoben.

http://paste.pocoo.org/show/84638/

Bei mir funktioniert es mal.

Bei der "try und except" Anweisung konnte ich den Fehler nicht rausbekommen. Hier mal die Fehlermeldung.

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1406, in __call__
    return self.func(*args)
  File "client_2.py", line 43, in start_chat
    message, client_ip = self.client.get_message()
  File "client_2.py", line 81, in get_message
    message, (client_ip, client_port) = self.s.recvfrom(self.BUFSIZE)
error: (11, 'Resource temporarily unavailable')

gruss frank
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo !

Der Error muss im CHAT_CLIENT gesetzt werden.

Code: Alles auswählen

def get_message(self):
        try:
            message, (client_ip, client_port) = self.s.recvfrom(self.BUFSIZE)
        except socket.error:
            message = ""
            client_ip = ""
        return message, client_ip

gruss frank
Antworten