[C#] Chat Programmieren

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von eddi2345.

    [C#] Chat Programmieren

    Hallo,
    ich möchte einen Chat Programmieren mit Plugin System usw.
    Doch habe ich leider keine Ahnung von Netzwerk programmierung.
    GIbt es da evt. schon gute libs, mit denen man einen brauchbaren chat schreiben kann?
    oder sollte man das evt alles selbst coden?

    Zudem weiß ich leider nicht wo ich die ganzen grundbefehle nachschlagen kann.

    Es sollte wenn möglich über TCP laufen

    Und wie kann man dann eine richtige Userverwaltung einbauen?


    Danke! :)

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    eddi2345 schrieb:

    Doch habe ich leider keine Ahnung von Netzwerk programmierung.
    Dann würde ich damit anfangen.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Danke nochmal an euch drei!

    Habe jetzt einen großen teil des Servers fertig, und einen kleinen client gebastelt!

    z.b. wenn ein client eine message sendet, sieht das so aus: msg±hallo welt

    Der Server gibt das so an alle weiter: msg±eddi2345±admin±hallo welt

    Und ja, da steht admin denn es ist schon ein kleines Rechte system eingebaut :)

    MfG

    eddi2345

    eddi2345 schrieb:

    Der Server gibt das so an alle weiter: msg±eddi2345±admin±hallo welt


    Warum lässt du den Server übermitteln, ob der Absender ein Admin ist oder nicht?
    Moin

    Wahrscheinlich, damit der Client den Chat entsprechend formatieren kann. Ich persönlich hätte aber zum (eigenen) Login eine Userliste mit den Namen, Rängen, etc. der aktuell eingeloggen User übertragen und zu jedem Login eines anderen Users einen Datensatz gesendet, der diese Liste ergänzt. Dadurch kann man z. B. mit User-IDs arbeiten und etwas Traffic sparen. Noch dazu kann man eine Liste der aktuell eingeloggten User anzeigen, ohne zusätzliche Daten zu übertragen. Außerdem hätte ich ein Protokoll eingesetzt, das vom Menschen besser lesbar/schreibbar ist.

    Beispiel (Client und Server sind die jeweils sendenden Verbindungspartner, Anlehnung an FTP):

    Quellcode

    1. <Eigener Client verbindet>
    2. Client: JOIN timmi31061
    3. Server: 100 IsOp
    4. Server: 200 true
    5. Server: 100 Online users:
    6. Server: 100 Id Name Rank IsOp
    7. Server: 101 0 eddi2345 Admin true
    8. Server: 101 1 timmi31061 Guest false
    9. <Jemand schreibt eine Nachricht, in diesem Fall timmi31061>
    10. Client: MSG Moin!
    11. Server: 200
    12. Server: 103 1 Moin!
    13. /* ^ Kommentar: Edit: Schreibfehler verbessert (2 => 1) */
    14. <Ein anderer User verbindet>
    15. Server: 101 2 radio-ffk Guest false
    16. <Ein User trennt die Verbindung, in diesem Fall radio-ffk>
    17. Server: 102 2
    18. <Eigener Client trennt die Verbindung>
    19. Client: LEAVE
    20. Server: 200 OK

    Hier antwortet der Server immer mit einem Statuscode:

    Quellcode

    1. 200: Alles gut!
    2. 100: Kommentar für menschliche Mitleser
    3. 101: Neuen Eintrag in der Userliste vornehmen
    4. 102: Eintrag in der Userliste entfernen
    5. 103: Neue Nachricht


    Wie man hier sieht, ist dieses Protokoll sehr leicht für den Menschen lesbar.
    Mit freundlichen Grüßen,
    Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „timmi31061“ ()

    War halt eine Frage an den TE und scheint mir, jetzt wo @timmi31061 das mit der Formatierung erwähnt, auch wieder sinnvoll. Bin nur nicht sofort auf die Formatierungsgeschichte gekommen weil der Server bei meinem Chat z.B. die Nachricht mit einem Hex-Farbcode beginnt um auch unter den Admins verschiedene Farben zu ermöglichen.
    Das ist eig eine total gute idee, Das mit dem FTp ähnlichen protokoll. Damit kann ich ja theoretisch mit einem Extra debug client die taten des servers besser überwacfhen, oder? :)
    Schreibe zusätzlich grade einen Masterserver, für die Öffentliche serverliste

    Danke nochmals für die antworten

    Edit: hab jetzt mal ein system geschrieben:

    Spoiler anzeigen

    Client Codes vordem Join:

    ###getMotd | Return: 133 <MessageOfTheDay>
    ###getSlots | Return: 132 <onlineusers> <maxusers>

    Client Codes:

    JOIN <name> | Gibt den Namen an.
    MSG <nachicht> | Sendet eine Nachicht.
    PMSG <id> <nachicht> | Sendet eine nachicht an einen bestimmten client.
    SETOP <id> | Gibt einem clienten op.
    STOP <reason> | Stoppt den Server.
    DEOP <id> | Nimmt dem Client seine OP rechte
    POKE <id> | Stupst einen Clienten an.


    Server Codes:

    144 <name> <id> <rang> | Wenn ein client auf den server Joint.
    145 <id> | Wenn ein client den server verlässt.
    146 <false/true> | Meldet dem clienten, das sein OP status geändert wurde. True / False
    147 <id> <true/false> | Meldet dem clienten, das ein anderer client einen neuen OP status hat.
    148 <id> | Meldet dem clienten, das er von <id> angestupst wurde.
    200 <command> | Meldet dem clienten, das der command <command> erfolgreich ausgeführt wurde.
    201 <command> | Meldet dem client, das er keine rechte für den command hat.
    202 <reason> | Meldet dem client, das er gebannt wurde
    203 <reason> | Meldet dem client, das er gekickt wurde.
    204 <reason> | Meldet dem client, das ein anderer User gebannt wurde.
    205 <reason> | Meldet dem client, das ein anderer user gekickt wurde.
    206 | Meldet dem client, das ein passwort benötigt wurde

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „eddi2345“ ()