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