Seite 1 von 1

Netzwerk-Datenstrom auslesen ?

Verfasst: Freitag 18. Oktober 2013, 20:55
von IronEagle
Hallo Leute,

ich bin noch ganz neu in der Python Welt und hänge an einem Problem.

Ich bekomme von einem Server Daten zugesandt und muss diese Daten in verschiedene Variablen schreiben.

Die Message die mir der Server sendet sieht ungefähr so aus:

1 Byte [Message Header]
1 Integer [Stringlength]
1 String [Command]
1 Integer [Checksumme]

Ich hoffe ihr könnt mir bei meinem Problem helfen.

Viele Grüße

Re: Netzwerk-Datenstrom auslesen ?

Verfasst: Freitag 18. Oktober 2013, 21:05
von BlackJack
@IronEagle: Was ist denn jetzt die Frage?

Re: Netzwerk-Datenstrom auslesen ?

Verfasst: Freitag 18. Oktober 2013, 23:28
von IronEagle
IronEagle hat geschrieben: und muss diese Daten in verschiedene Variablen schreiben.
OK ich habe mich wohl undeutlich ausgedrückt, sorry dafür :oops:

Meine Frage lautet:

Wie kann ich die gesamten Empfangenen Bytes so auslesen, dass ich jeden einzelnen Teil der vom Server gesendeten Daten in eine gesonderte Variable schreiben kann?

Re: Netzwerk-Datenstrom auslesen ?

Verfasst: Freitag 18. Oktober 2013, 23:45
von BlackJack
@IronEagle: Du musst die einzelnen Bytes entsprechend interpretieren. Entweder „per Hand” oder zum Beispiel mit Hilfe des `struct`-Moduls aus der Standardbibliothek.

Edit: Minimal läuft das auf so etwas hinaus:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf8
import socket
import struct
from contextlib import closing


def read_integer(in_file):
    return struct.unpack('<i', in_file.read(4))[0]


def main():
    with closing(socket.socket()) as sock:
        sock.connect(('127.0.0.1', 1234))
        connection = sock.makefile('rw')
        connection.write('some request...')
        connection.flush()
        header = ord(connection.read(1))
        print header
        command_length = read_integer(connection)
        command = connection.read(command_length)
        print command
        checksum = read_integer(connection)
        print checksum


if __name__ == '__main__':
    main()
Aber eigentlich wird man da eine Klasse für schreiben wollen, die zum Beispiel beim lesen auch gleich die Prüfsumme berechnet/aktualisiert um sie mit der gesendeten zu vergleichen.