Netzwerk-Datenstrom auslesen ?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
IronEagle
User
Beiträge: 2
Registriert: Freitag 18. Oktober 2013, 20:49

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
BlackJack

@IronEagle: Was ist denn jetzt die Frage?
IronEagle
User
Beiträge: 2
Registriert: Freitag 18. Oktober 2013, 20:49

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?
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.
Antworten