Client-Server Chat
Verfasst: Mittwoch 9. Dezember 2009, 20:46
Hi hier hab i mal nen kleines Programm geschrieben das einen Chat zwischen einem Teilnehmer(Server) und einem anderen (Client) gewährleisten soll. Ich habe versucht dass ganze mit Threads so zu machen, dass man nicht immer auf rückmeldung des anderen warten muss. Allerdings kommt im Test nur die Nachricht vom Client zum Server an und nicht vom Server zum Client!
Server-Code
und hier der code für den client
Was haltet ihr davon? ich weis ist noch sehr einfach! Und woran liegt es dass der Client nicht die Nachricht vom Server bekommt?
Server-Code
Code: Alles auswählen
import socket
import threading
import Queue
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(("",50000))
s.listen(1)
class Chatserverempfangen(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
try:
while True:
print "Warte auf Teilnehmer"
komm,addr = s.accept()
print komm
print addr
while True:
data=komm.recv(1024)
if not data:
print "Teilnehmer hat sich abgemeldet"
komm.close()
break
print "[%s] %s" %(addr[0],data)
finally:
s.close()
class Chatserversenden(threading.Thread):
Briefkasten=Queue.Queue()
def __init__(self):
threading.Thread.__init__(self)
def run(self):
while True:
komm,addr=s.accept()
while True:
nachricht=Chatserversenden.Briefkasten.get()
komm.send(nachricht)
Chatserversenden.Briefkasten.task_done()
thread1=Chatserverempfangen()
thread1.start()
thread2=Chatserversenden()
thread2.setDaemon(True)
thread2.start()
while True:
eingabe=raw_input("> ")
if eingabe=="exit":
break
else:
Chatserversenden.Briefkasten.put(eingabe)
Chatserversenden.Briefkasten.join()
thread1.join()
Code: Alles auswählen
import socket
import threading
import Queue
ip=raw_input('Geben Sie IP ein: ')
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((ip,50000))
class Chatserverempfangen(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
antwort=s.recv(1024)
print "[Server]"+antwort
class Chatserversenden(threading.Thread):
Briefkasten=Queue.Queue()
def __init__(self):
threading.Thread.__init__(self)
def run(self):
nachricht=Chatserversenden.Briefkasten.get()
s.send(nachricht)
Chatserversenden.Briefkasten.task_done()
thread1=Chatserverempfangen()
thread1.start()
thread2=Chatserversenden()
thread2.setDaemon(True)
thread2.start()
while True:
eingabe=raw_input("> ")
if eingabe=="exit":
break
else:
Chatserversenden.Briefkasten.put(eingabe)
Chatserversenden.Briefkasten.join()
thread1.join()