TCP Chat Online Anzeige

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von ThuCommix.

    geschrieben?
    vb-paradise.de/allgemeines/sou…mplettloesung/#post835248

    ich hab mir den Chat nicht angesehen, wenn man aber die IP von hand eintragen muss, dann kannste das mit dem anzeigen so ziemlich knicken. Um so was zu verwirklichen brauch es schon einen Server, der dann weis Wer mit welcher IP sich angemeldet hat, und die beiden dann quasi "verbindet" oder den gesamten Verkehr trägt (ersteres Skype vor MS, letzteres Skype nach MS).
    Türlich ist das möglich. Aber vermutlich nicht so einfach wie du dir das vorstellst. Denn wer gerade "online" ist, das weiß ja nur dein Chat-Server. Und genau den muss der Client um die entsprechende Info bitten.
    Ich vermute aber stark, dass dein "TCP-Chat" eher so aussieht, dass alles, was dein Client an den Server schickt, ungefiltert 1:1 an alle anderen Clients weiterverteilt wird. Und mit dem Ansatz wird es halt etwas "schwieriger".
    Besser wäre es, wenn der Server den vom Client empfangenen Text auf bestimmte Muster hin überprüft. Zum Beispiel könnte man alles, was mit einem "/" anfängt, als Befehl interpretieren, und nur alles andere ohne "/" am Anfang an die anderen Clients weiterreichen.
    Kennt der Server den Befehl, führt er ihn aus, z.b. könnte ein Befehl "/who" dafür sorgen, dass der Server dem Client, der diese Zeile geschickt hat, eine Liste aller mit ihm verbundenen Clients (z.B. deren Nicks oder was auch immer) zurückschickt.
    Ist dem Server ein Befehl nicht bekannt, kannst du wahlweise sagen: "na gut, dann isses wohl ne normale Chatzeile" und damit verfahren wie mit allem anderen auch oder du lässt den Server eine Meldung "Befehl xy nicht bekannt" an den sendenden Client schicken.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.

    ThuCommix schrieb:

    Der Server kennt ja die Verbindungen, also kann der Server in Regelmäßigen Abständen alle Clients benachrichtigen wer alles angeschlossen ist.

    Wieso ? Wenn ein Client connected sagt der Server das allen anderen Clienten, wenn der Client disconnected sagt er das auch allen Clienten. Es gibt ja nur zwei Zustände. Online und nicht-online.
    Im Zeitraum zwischen Connect und Disconnect MUSS der Client ja online sein. Und im restlichen Zeitraum ist er natürlich offline.

    Edit: @ThuCommix: Hast Recht, Denkfehler meinerseits.

    Arby schrieb:

    Besser wäre es, wenn der Server den vom Client empfangenen Text auf bestimmte Muster hin überprüft. Zum Beispiel könnte man alles, was mit einem "/" anfängt, als Befehl interpretieren, und nur alles andere ohne "/" am Anfang an die anderen Clients weiterreichen.



    Was allerdings auch mehr als unschön ist.


    Der Client und Server verschickt keine Plain-Text Nachrichten sondern "Pakete" in denen bestimmte Informationen stehen. So könnte es z.B ein TextPackage geben, in der die Nachricht steht. Das Paket wird serialisiert und in den Stream geschrieben, auf der Serverseite wird deserialisiert und überprüft um welches Paket es sich handelt. Dadurch erschafft man die Möglichkeit spezielle SystemPakete zu erstellen die z.B nur dafür fungieren den Client alle anderen Clients mitzuteilen. Wär dann z.B ein NotifyClientsPackage mit einer Liste von allen IPs/Nicks oder so.


    Wieso ? Wenn ein Client connected sagt der Server das allen anderen Clienten, wenn der Client disconnected sagt er das auch allen Clienten. Es gibt ja nur zwei Zustände. Online und nicht-online.
    Im Zeitraum zwischen Connect und Disconnect MUSS der Client ja online sein. Und im restlichen Zeitraum ist er natürlich offline.


    So ein Quatsch. Angenommen Client A joint auf den Server, klar geht da eine Nachricht raus das er da ist, aber wenn dann danach Client B joint, weiß dieser nichts von A da er die Meldung verpasst hat.
    Für dich mag es unschön sein, je nach Anwendungszweck ist aber mehr als praktisch, weil du dann nämlich auch die Möglichkeit hast, den Server über eine reine Telnet-Verbindung zu steuern. Sorry, ich bin IRC-geschädigt, da läuft das (fast) genau so...
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    Der Vorteil wär aber, dass viele Informationen (z.B die Liste der ganzen Clients) in ein Paket gepackt werden und der Client dann über die Property "Clients" einfach darauf zugreifen kann, und sich nicht mit Stringverarbeitung rumschlagen muss. Glaub mir, wenn ich die Information der Clients in einen String packe, kann das schon ziemlich Clusterfuck werden.
    ich denke auch: für einen richtigen Chat braucht man ein durchdachtes Befehlsprotokoll, und im Server auch eine relationale Datenverarbeitung, für User und ChatRooms und sowas. Vlt muss man auch moderieren können, also zB. einen User kicken.
    Oder zumindest Ignore-Listen führen können - das geht ja ohne Moderation.
    Ich sehe keinen Grund, das alles nur per String regeln zu wollen - TCP überträgt Bytes, und String ist nur eine Interpretation davon.
    Man will ja vlt. auch mal Dateien übertragen können, oder?
    Nur um auf dein Beispiel mit den Dateien einzugehen, das Paket hätte dann eine Eigenschaft Filename und einen ByteArray, schon wär das Problem gelöst, ich denke darüber sollte generell mal jemand ein Tutorial machen, da solche Fragen im Netzwerkbereich oft auftreten, und alle nur mit Strings rumfuddeln.
    Okay.

    Und wenn du als Chatteilnehmer (z.B. mit Channel-Operator-Rechten) einen Benutzer kicken willst, dann machst du was? Buttons klicken? Aktionen auslösen? Oder weil du sowieso darauf getrimmt bist, ständig was in deinen Chatzeile zu tippen, einfach "/kick user" eingeben und absenden? Interpretiert werden muss diese Zeile dann so oder so. Ob das nun der Client macht und daraus einen "Paketorientierten Befehl" bastelt oder ob du es einfach 1:1 an den Server schickst und er sich zentral darum kümmert, darüber lässt sich sicher streiten.

    Ich würde bei einem einfachen Chat weiterhin bei diesem Modell bleiben, denn dann habe ich - wie gesagt - auch die Möglichkeit, per Telnet solche Befehle abzusetzen.

    Ach und zu den Dateien: Die verschickt man nicht über das Chat-Protokoll. Ein vernünftiger Chat öffnet parallel zur Chat-Verbindung eine zweite Socket-Verbindung auf der dann Dateien ausgetauscht werden.

    Ach und nochwas, wo ich grad dabei bin: Ich schrieb extra dazu
    Ich vermute aber stark, dass dein "TCP-Chat" eher so aussieht, dass alles, was dein Client an den Server schickt, ungefiltert 1:1 an alle anderen Clients weiterverteilt wird.

    Das ist nämlich die Art wie meist an solche "einfachen" TCP-Chats herangegangen wird in Einsteiger-Tutorials und Buch-Beispielen... Und genau darauf basiert mein Ansatz mit den "/"-Befehlen.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.

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