• Offizieller Beitrag

    Version: 0.9.7

    Ich habe dann doch mal etwas Zeit gefunden ein Chatprogramm zu programmieren. Natürlich benutze ich dafür meine Chatbox-UDF. :)
    Wichtig war mir aber vor allem, dass es ein Multi-User-Chatprogramm werden sollte. Und wie der Name schon andeuted, wird die Kommunikation verschlüsselt übertragen (es handelt sich dabei um eine XOR-Verschlüsselung).
    Es werden jetzt (bei: "Wer ist online?") auch die IP-Adressen der angemeldeten Benutzer angezeigt. Außerdem habe ich einen Whisper-Modus hinzugefügt (Befehl: /w "user" nachricht) und mit dem Befehl "/HELP", "/HILFE" oder "/?" wird eine Befehlsliste angezeigt.
    Weiter ist es nicht mehr möglich, sich mit einem Benutzernamen anzumelden, der bereits existiert (Admin existiert immer!). Der Server besitzt standardmäßig den Benutzernamen "Admin", man kann ihn aber ändern (Admin bleibt reserviert).

    Update v0.9.6 :
    - Der Help-Befehl funktionierte nur beim Clientprogramm
    - Man konnte den Server nicht "anwhispern"
    - Der Server konnte nicht "whispern"
    - Während sich ein Client anmeldete, wurden die Nachrichten der anderen Clients nicht empfangen/weitergesendet
    - Es wird jetzt bereits vor der Passworteingabe geprüft, ob der Benutzername schon existiert

    Update v0.9.7 :
    - der Fehler aus Post#23 (Nachricht vom Admin wurde nicht gesendet) ist behoben
    - der Benutzername darf jetzt nur noch folgende Zeichen enthalten: a-z, A-Z, 0-9 und den Unterstrich _
    - durch die Reduzierung der möglichen Zeichen beim Benutzernamen braucht man jetzt beim whispern keine Anführungszeichen mehr.
    - die Hilfe enthält jetzt auch eine Erklärung der BB-Codes
    - Standardschrift jetzt etwas größer (3 statt 2)
    - die Nachrichten sind jetzt standardmäßig schwarz (nur Datum/Uhzeit und Benutzername werden noch farbig dargestellt)
    - beim Serverprogramm wurde das Eingabefeld nach dem absenden nicht geleert.
    - das Clientprogramm versucht jetzt gleich beim start eine Internetverbindung herzustellen (wegen evtl. Firewallmeldung)
    - einige Änderungen am Sourcecode wegen des (noch fehlenden) Dateitransfers.

    Kurz etwas zum Ablauf:
    - Der Rechner, auf dem das Serverprogramm läuft, benötigt im Router (so vorhanden) eine Port-Weiterleitung auf die lokale IP-Adresse. Mein Programm nutzt TCP-Port: 64064
    - Die Clients benötigen zum Verbindungsaufbau die WAN-IP-Adresse des Servers (wird im Serverprogramm angezeigt) oder die DynDNS-Adresse.
    - Nachfragen der Firewall bezüglich des Verbindungsaufbaus der Programme muss man natürlich zustimmen.
    - Hat ein Client eine Verbindung zum Server herstellen können, wird nach einem Passwort gefragt. Dieses kann man im Serverprogramm einstellen und sollte es den Clients mitteilen. :D
    - Wenn das Passwort korrekt war, besteht nun eine Verbindung zwischen Client und Server und das chatten kann beginnen.
    - Sind mehrere Clients mit dem Server verbunden, werden die Nachrichten von jedem Client an alle anderen Clients gesendet. Somit sehen alle, was jeder der Teilnehmenden sendet.

    ToDo-List:
    - Verschlüsselung der Kommunikation
    - Dateitransfer zwischen Client und Server. Client <-> Client wird wohl nur über den Server-Umweg gehen.

    Alle benötigten Dateien (Scripte, Grafiken, Exedateien) befinden sich im ZIP-Archiv (Anhang).

  • Oscar: Mal wieder ein Super Script/Projekt von dir
    Wie immer eigentlich (1A Arbeit :thumbup: )

    Zum Dateisenden zwischen Client & Client: Mann muss ja leider immer den Serverumweg nehmen
    Sonst wäre alles viel einfacher!

    PS: Du bist so ein "kleiner" Perfektionist, wie ich das sehe. Oder? :D
    Edit: Wie bist du auf den Port 64064 gekommen ( :rofl: )

  • Wow,
    Respekt, das Skript hats echt in sich^^

    Habs jetzt nur mal so überflogen, aber für das was es kann, ist es ziemlich kurz

    gute Arbeit würd ich sagen ;)

    Hab mich auch mal an einem Chat probiert (nicht jetzt, schon länger her) LINK
    Hat aber bissl mehr zeilen xD, aber auch mehr Funktionen (keine doppelten Nicknames, Admin-Kick / Ban, etc)
    Ich hab meines an ein paar Stellen allerdings sehr kompliziert geschrieben (finde ich zumindest, lasse mich gerne anderweitig belehren)
    Außerdem benutze ich den GuiOnEventMode..

  • da kann ich den anderen hier nur ZUSTIMMEN. Erste Klasse, habe mir erlaubt den Client ein wenig zu ändern, die Server IP wird nun automatisch eingetragen. Aber warum sehe ich keine Smileys, sondern nur ein graues Feld. ?(

  • Ist wirklich super. :thumbup:

    Zum Datentransfer: Client -> Server -> Client erscheint mir doch ziemlich uneffektiv. Wieso ist dieser Weg nötig?


    Das ist nötig, da ansonsten zumindest einer der Teilnehmer als Server fungieren muss. Dazu muss bei einem eventuell vorhandenen Router ein Port freigeschaltet werden und in der Desktopfirewall (bzw. Standard-Windowsfirewall) ebenfalls. Das kannst du von einfachen Anwendern nicht verlangen ^^

    • Offizieller Beitrag

    XP-User: Wie meinst Du das mit "Server IP wird nun automatisch eingetragen"? Und wenn Du keine Smilies siehst, dann hast Du vielleicht den "png"-Ordner nicht mit im Scriptverzeichnis (sowohl beim Server als auch beim Client)?!


    nuts: Ja, der Datentransfer von Client zu Client über den Server ablaufen zu lassen, ist uneffektiv. Wobei mir da schon eine Idee gekommen ist, von deren Umsetzbarkeit ich aber noch nicht überzeugt bin:
    Wenn die Clients ihre IP-Adresse an den Server übermitteln, dann könnte dieser doch einen Verbindungsaufbau zwischen den Clients ermöglichen?! Obwohl da wird der Router/Firewall blocken, oder? Vielleicht über Port 80? Muss ich erstmal testen...

  • Also so irgendwie wäre es schon besser. Die IP's der Clients sind ja dem Server bekannt und können weitergereicht werden.
    Zur Not muss der User eben mal die readme lesen und die Firewall in ihre Schranken weisen :D
    Das Konzept immer über den Server zu gehen ist ja auch nicht so einfach zu managen (Bandbreitenbeschränkung pro User usw.)

  • habe noch nen Button hinzugefügt, auf Funpic.de habe ich Webspace für soetwas, wo meine IP hochgeladen wird. Mit InetGet("http://user.funpic.de//ip.htm wird dann die Server IP automatisch in Client-IP-feld eingetragen.

    Der Ordner png ist im gleichen Verzeichnis wie die Scripte, na vieleicht liegt es ja an meinem System hier, wenn es bei anderen geht. Bei mir wird nur ein graues Feld angezeigt, weiss nicht warum.

    • Offizieller Beitrag

    blubbstar: Stimmt! Port 80 ist standardmäßig auch dicht. Direkter "Client <-> Client"-Dateitranfer wird nicht gehen..

    Es gibt jetzt erstmal eine neue Version (v0.9.5 siehe Post #1).
    Kommunikation findet nun verschlüsselt statt, es gibt einen Whisper-Modus, IP-Adressen der Benutzer werden angezeigt und einiges mehr...

    Kritik und Fehlermeldungen sind herzlich willkommen! :)

  • 1. Nette Idee und gut umgesetzt ;)
    2. Warum versuchst du nicht mal das ganze in UDP zu machen ?? Habe hier im Forum noch kaum UDP Skripte gesehen.

    Edit : Wie wärs mit Admins für den Chat die man am Server einstellen kann die dann andere User kicken/bannen können.

    • Offizieller Beitrag

    UDP ist für ein Chatprogramm eher schlecht geeignet. Den Vorteil des fehlenden Verbindungsaufbaus musst Du mit Fehlerkorrekturmassnahmen gegensteuern (bei UDP wird ein fehlendes Paket nicht erneut angefordert).
    Und eine Port-Weiterleitung brauchst Du auch bei UDP. Ich habe also keinerlei Verlangen danach, das Programm auf UDP umzustellen. :)

    Das mit User kicken/bannen kommt vielleicht noch. Sehe ich im Moment noch nicht als so wichtig an, da es eher ein privater Chatroom sein soll.