Frage

Ich lerne Socket-Programmierung (in Python) und ich frage mich, was die beste / typische Art und Weise zur Einkapselung von Daten? Meine Pakete verwendet werden, laufen zu erteilen, stoppen, konfigurieren usw. Befehle auf der Empfangsseite. Ist es hilfreich JSON zu verwenden oder einfach nur gerade Text?

War es hilfreich?

Lösung

Ich schlage vor, Sie verwenden ein feste oder meist festes Format, wie diese Dinge einfacher machen.
Durch die dann Funktionen wie die Standard-Bibliothek struct.Struct , mit seinem pack () und umpack () -Methoden oder möglicherweise ein wenig mehr vorge Pacakges wie Construct , Sie für Sie getan viel von der Parsing-Arbeit haben sollte; -)

Andere Tipps

Ich schlage vor, Klartext zu beginnen - es ist einfacher zu debuggen ist. Das Format, das Ihr Text nimmt hängt davon ab, was Sie tun, wie viele Befehle, Argumente, usw. Haben Sie konkretisieren, wie Sie Ihre Befehle aussehen? Wenn Sie herausfinden, was das aussieht wie es wahrscheinlich ein Format alle auf ihrem eigenen vorschlagen werden.

Sind Sie mit TCP oder UDP? TCP ist einfach, da es ein Strom, aber wenn Sie mit UDP die maximalen Größe von UDP-Paketen im Auge behalten und damit, wie groß Ihre Nachricht sein kann.

Wenn Sie etwas als Lernübung entwickelst Sie könnte es am besten finden, mit einem strukturierten Text zu gehen (dh. Für Menschen lesbaren und menschlichen beschreibbar) Format.

Ein Beispiel sei eine feste Anzahl von Feldern pro Befehl zu verwenden, mit fester Breite Textfelder und / oder leicht parsable Feldbegrenzungszeichen.

Generell Text ist weniger effizient in Bezug auf die Paketgröße, aber es hat die Vorteile, dass Sie es leicht lesen kann, wenn man eine Paketerfassung zu tun (z. B. unter Verwendung von wireshark) oder wenn Sie wollen Telnet verwenden, um einen Client zu imitieren.

Und wenn dies nur eine Lernübung dann die Fehlersuche erleichtern ist ein wichtiges Thema.

Werfen Sie einen Blick auf, wie scapy (eine geile Python Paket Manipulation Bibliothek) setzt sie. Sieht so aus, dass eine Handvoll Felder rel="nofollow.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top