Low-Level-Networking

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
g-sus
User
Beiträge: 2
Registriert: Freitag 16. August 2002, 14:39
Wohnort: Duisburg
Kontaktdaten:

Hi erstmal! :D
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()
piddon
Gründer
Beiträge: 410
Registriert: Dienstag 30. Juli 2002, 18:03
Wohnort: Oestrich-Winkel
Kontaktdaten:

Hallo und willkommen.

Schau dir das mal an, evtl. hilft es dir:

http://py.vaults.ca/parnassus/apyllo.py ... .350949141

Das ist ein Asynchroner Chatserver.

Ebefalls kannst du hier

http://py.vaults.ca/parnassus/

mal nachsehen, ob dort etwas existiert, das dich weiterbringt.

Ich selbst kann dir leider nur mit diesen Links helfen.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
g-sus
User
Beiträge: 2
Registriert: Freitag 16. August 2002, 14:39
Wohnort: Duisburg
Kontaktdaten:

cool!
ich habs zwar noch nicht gelesen, aber jetzt hab ich wenigstens wieder was, was sich zu lesen lohnt :wink:

bigTHX! :D
Antworten