Ich muss schon sagen, so ein Forum für Python war schwer zu finden *bg*
aber zum Thema:
Ich habe mit Python einen Server programmiert, der eine Verbindung mit einem Client (auch mit Python programmiert) eingehen kann.
Nun will ich aber, dass sich mehrere Clients an dem einen Server verbinden können. Diese sollen dann untereinander kommunizieren können (einfache Strings versenden - ein Instant Messanger sozusagen).
Aber weder schaffe ich es durchs Probieren, noch durchs Nachschlagen(da ich bis jetzt kein Nachschlagewerk mit genau dieser Problemstellung gefunden habe)!
Ich hoffe man hat mich verstanden und kann mir helfen!
Anbei der Quelltext des Servers:
Code: Alles auswählen
from socket import *
from IM_GUI import *
from thread import *
import threading
class Main:
def __init__(self):
self.connection = Connection()
sWindow = Tkinter.Tk()
sFrame = Frame(sWindow,"top")
sFrameM = Frame(sWindow,"top")
sFrameB = Frame(sWindow,"bottom")
sButton = Button(sFrame,"Server starten",lambda x=self: start_new_thread(x.connection.run,(x,)))
self.sStatus = Text(sFrameM)
self.sStatus.width("20","5")
vScroll = Scrollbar(sFrameM,"vertical")
vScroll.view(self.sStatus.yview)
hScroll = Scrollbar(sFrameB,"horizontal")
hScroll.view(self.sStatus.xview)
self.sStatus.verticalScroll(vScroll.set)
self.sStatus.horizontalScroll(hScroll.set)
class Connection(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.user = {"00000001":"Server"}
self.host = "localhost"
self.port = 12345
def ears_on(self):
self.server = socket(AF_INET,SOCK_STREAM)
self.main.sStatus.add("socket\n")
self.server.bind((self.host,self.port))
self.main.sStatus.add("bind\n")
self.server.listen(1)
self.main.sStatus.add("listen\n")
def run(self,main_object):
self.main = main_object
self.ears_on()
x = 1
self.conn, self.addr = self.server.accept()
self.main.sStatus.add(self.addr)
while x!="IM_Sock|exit::1109":
x = self.listen()
self.conn.close()
self.main.sStatus.add("\ngeschlossen\n")
def listen(self):
data = self.conn.recv(1024)
if data != "IM_Sock|exit::1109":
print data
try:
data = self.user[data[-8:]] + ": " + data[:-8] + "\n"
except:
data = "KEIN USER!"
self.conn.send(data)
return data
if __name__ == "__main__":
Main()
Tkinter.mainloop()