Mehrere Verbindungen zu einem Server



  • Hallo,
    ich will ein Serverprogramm schreiben, dass sich mit mehreren Clients verbindet. Wenn zu einem Client die Verbindung abbricht, soll bei jedem anderen Client eine Fehlermeldung ausgegeben werden. Wie fange ich das am besten an, dass ich mich mit mehreren Clients auf einen Server verbinde? Sind Threads das Richtige? Gibts dafür vielleicht ein Tutorial?

    Bitte helft mir.

    LG
    Networker



  • Das geht sehr einfach mit WinApi für Windows-Anwendungen. Du brauchst für alle beteiligten Programme - Server, Clients - die HWND-Handles der Hauptfenster. Diese erhälst Du beim Aufruf der Programme und speicherst sie prozess-global, z.B. in einer RW-Datei. Dann regelst Du alles weitere durch geeignete USER-Nachrichten. Ist nicht schwer, verlangt aber ein gutes Verständnis von Windows.





  • Die HWND haben damit garnichts zu tun.

    Auch muss der Server nichts über Hauptfenster etc. der Clients wissen.
    Es ist Socketprogrammierung und auch sicher nicht in wenigen Zeilen erklärt.

    Weiters kommt es auf das BS an. Windows ist anderes als Unices.
    Nur soviel.
    Der Server erfährt ja wenn der Socket geschlossen wird.
    Dann sendest Du an alle Clients diese Nachricht das sich Client XY geschlossen hat.
    Du braucht da eine eigene "Sprache" für die Kommunikation.
    z.B.
    CLOSE CLIENT 123
    Dieses wertest Du auf den CLients aus. Client mit der Nummer 123 hat sich geschlossen.

    Beschäftige dich erstmal mit den Grundlagen.
    Hier findest DU auch sicher viel über Sockets, mehrere Cl., select, AsyncSocket, etc.



  • @ UNIX-TOM: Networker will nur wissen, wie Server und Clients gegenseitig abfragen können, ob die anderen aktiv sind. Das geht - wie beschrieben - mit schlichten Nachrichten via HWNDs und einer Handvoll programmeigener Flags.



  • berniebutt schrieb:

    @ UNIX-TOM: Networker will nur wissen, wie Server und Clients gegenseitig abfragen können, ob die anderen aktiv sind. Das geht - wie beschrieben - mit schlichten Nachrichten via HWNDs und einer Handvoll programmeigener Flags.

    Ähhhhhhh ... schon mal daran gedacht, daß jeder Client auf einer anderen physikalischen Maschine laufen kann? Daß jeder Client unter einem völlig anderen OS laufen kann? Daß eine Client-Anwendung auch eine Konsolenanwendung ohne Fenster und ohne Messageloop sein kann? Daß jeder Client ... to be continued ...



  • Unix-Tom schrieb:

    Der Server erfährt ja wenn der Socket geschlossen wird.

    wenn jemand den client einfach ausschaltet und zufälligerweise gerade keine pakete unterwegs sind, die ein ACK benötigen, kriegt der server nix mit.
    🙂



  • -fricky- schrieb:

    Unix-Tom schrieb:

    Der Server erfährt ja wenn der Socket geschlossen wird.

    wenn jemand den client einfach ausschaltet und zufälligerweise gerade keine pakete unterwegs sind, die ein ACK benötigen, kriegt der server nix mit.
    🙂

    Es gibt ja viele Möglichkeiten den Socket zu testen.
    Das man nicht einfach darauf wartet sollte klar sein aber das macht eben dann ein gutes Design eines C/S aus.



  • Unix-Tom schrieb:

    Es gibt ja viele Möglichkeiten den Socket zu testen.

    naja, eigentlich nur eine: irgendwas schicken, was der andere beantworten muss, duplicate acks, tcp keep-alive pakete oder sowas.
    🙂



  • Der Server kann ja zyklisch "bist du noch da" pakete senden. wenn ein client innerha´lb einer deadline nicht anwortet, ist er nicht mehr da...


Anmelden zum Antworten