Seite 1 von 1

socket +Tk -Gui

Verfasst: Donnerstag 28. August 2008, 19:54
von kaytec
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

Verfasst: Donnerstag 28. August 2008, 20:00
von BlackJack
Ich glaube es ist nicht das erste mal, das ich schreibe, das Threads und GUIs sich nicht so vertragen. Das Programm ist kaputt.

Verfasst: Donnerstag 28. August 2008, 20:04
von kaytec
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

Verfasst: Donnerstag 28. August 2008, 21:42
von 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.

Verfasst: Donnerstag 28. August 2008, 21:49
von kaytec
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

Verfasst: Sonntag 7. September 2008, 11:09
von kaytec
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

Verfasst: Sonntag 7. September 2008, 22:30
von kaytec
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