1. #1

    Registriert seit
    06.11.2011
    Beiträge
    418
    Thanked 686 Times in 246 Posts

    Standard Begriffserklärungen

    Da man hier immer wieder Begriffe wie Paket, Token und Opcode durcheinander bringt, hab ich mal eine kleine Übersicht für euch zusammen gestellt. Ich hoffe, dass es ist nicht zu kompliziert ist und ich durch diesen Thread einige Missverständnisse aus dem Weg räumen kann. Wenn mir nachträglich noch was einfällt, werde ich es selbstverständlich ergänzen.

    Paket
    Client und Server sprechen nicht etwa Deutsch oder Englisch, sondern eine eigene Sprache. Sie kommunizieren mit Bytes, welche aber nicht einzeln verschickt werden, sondern als Paket. Bytes - und so auch Pakete - drückt man am besten in Hex aus, Bsp.: 9D A4 EE 84 88. Bei Knuddels ergeben die Bytes zusammengefügt einen String - 1999 halt, also kann man es auch in ASCII ausdrücken. Bei einem Paket aber, dem Module-Paket, ist das nicht der Fall, hier heißt es dann bspw. einfach 5 statt "Hallo". Bei dem Popup-Paket ist es teilweise auch so.

    Delimiter
    Oder anders ausgedrückt: Trennzeichen. Heutzutage braucht man Delimiter eigentlich gar nicht mehr, da Client und Server genau wissen wie lang das Paket oder einzelne Teile des Pakets sind, statt einem Trennzeichen stellt man hierzu ein Byte voran welches die Länge angibt. Aber bei Knuddels hat sich das noch nicht durchgesetzt, um das Paket in verschiedene Teile zu splitten verwenden sie das Null Char (Oktal: \0 bzw. \000, Hex: 00) als Delimiter.

    Token
    Token sind die einzelnen Teile eines Pakets welche durch einen Delimiter getrennt werden.

    Opcode
    Der Opcode (Operation Code) ist der erste Teil des Pakets, bei Knuddels ebenfalls durch einen Delimiter vom Rest getrennt, welcher angibt um welches Paket es sich handelt.

    Paketname
    Der Paketname ist der Name des durch den Opcode gekennzeichneten Pakets. Wie Knuddels die Pakete nennt bleibt uns vorenthalten, aber wir können ihnen ja eigene Namen verpassen. Das einfachste wäre bspw. das Paket welches durch den Opcode "e" gekennzeichnet wird e-Paket zu nennen, oder um es einen Namen zu verpassen welcher das Paket etwas besser beschreibt: Message-Paket.

    Input
    Vom Client aus bezeichnen wir die Pakete als Input, die der Server zum Client sendet. Vom Server aus (relevant für Emulatoren) sind es die, die der Client zum Server sendet.

    Output
    Wie man sich denken kann ist Output das Gegenteil von Input, sprich die Pakete die vom Client aus gesehen von Client zu Server und vom Server aus gesehen von Server zu Client gesendet werden.


    KLogger

    Download: Source ist mal wieder nicht mehr vorhanden, aber ich schreib die Tage eine neue Version und stell euch diese dann hier zur Verfügung.

    Der KLogger ist ein manipulierter Client (Input entspricht also Server->Client und Output entspricht Client->Server) zum Loggen von Paketen. Pakete werden sowohl als Hex als auch als Ascii dargestellt, mit Ausnahme von Sonderzeichen welche in der Ascii-Darstellung durch einen Punkt ersetzt werden. Um zu identifizieren um welches Zeichen es sich handelt muss man sich die Hex-Darstellung anschauen und gegebenfalls mit einen Hex Converter arbeiten.

    Beispiel
    Code:
    >> 65 00 2F 4B 61 63 6B 70 6F 6F 00 54 65 73 74
    e.Knuddels.Test
    Das ist unser Paket, als Hex und Ascii dargestellt. >> kennzeichnet, dass es sich um Output (Client->Server) handelt. Der Hex-Darstellung können wir entnehmen, dass es sich bei den Punkten um das Null Char (00) handelt, dies ist der Delimiter. Also sind e, Knuddels und Test unsere Tokens. e ist das erste Token, welches das Paket kennzeichnet, hierbei handelt es sich um das Message-Paket. Die beiden anderen Tokens enthalten weitere Informationen, z. B. ist Test die Nachricht und Knuddels der Channel in dem ich die Nachricht geschickt habe.

  2. #2

    Registriert seit
    31.01.2011
    Beiträge
    54
    Thanked 106 Times in 41 Posts

    Standard Begriffserklärungen

    Warum nicht UTF-8 und nullbytes als \0 anzeigen das man sie gleich besser erkennen kann im KLogger?

  3. #3

    Registriert seit
    06.11.2011
    Beiträge
    418
    Thanked 686 Times in 246 Posts

    Standard Begriffserklärungen

    Weil es nicht nur beim Null Char der Fall ist, es gibt viel zu viele Sonderzeichen. Bspw. \001, wie willst du das Zeichen erkennen, ob es nun durch ein Punkt ersetzt wurde oder nicht? Zum Loggen von Paketen eignet sich Hex halt am besten, oder wie stellst du dir das beim Module-Paket vor? Gewöhnt euch besser mal daran, denn Knuddels ist veraltet.

    Edit: Und Ascii bezieht sich hier auf die Darstellung, nicht auf die Kodierung.

    Edit: Und was ist wenn jemand im Chat \0 schreibt? Wenn man alles richtig loggen will, kann man auf Hex einfach nicht verzichten.

  4. #4

    Registriert seit
    22.05.2012
    Beiträge
    203
    Thanked 21 Times in 9 Posts

    Standard Begriffserklärungen

    Bis Flav einen neuen KLogger codet, hab ich für euch den alten mal updatet. Ich hatte den Logger ein wenig geändert, loggt kein Hex sondern ganz normal.

    Download:

    Mirror 1: Klogger afg
    Mirror 2: Klogger afg

Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.