Netzwerkschnittstelle - Socket - Einführung

  • Hallo,
    ich würde gern in die Netzwerkschnittstellen/Socketprogrammierung in Python einsteigen.

    Dazu habe ich ein paar Fragen und würde mich freuen, wenn ich Antworten/Hilfe bekomme.

    Folgendes Beipsiel empfängt ja in einer Dauerschleife Daten und gibt diese aus

    Da ist jetzt die Puffergröße bei 4096 Bytes.
    Was ist, wenn ich jetzt Daten die größer/kleiner (variabel) sind als die angegebenen 4096 Bytes empfangen will?

    Wenn nun 4096 Bytes empfangen wurde, wird "data" überschrieben, richtig?

    Vielleicht schreib ich mal den Hintergrund dazu.
    Ich bekomme bald eine Anwendung, die über eine Schnittstelle Daten bereitstellt, welche in unregelmäßigen Abständen gesendet werden.

    Und diese möchte ich dann in Python weiterverarbeiten.

    Wenn denn nun ein Stoppzeichen in den Daten ist, welcher einen Datensatz vom anderen trennt, kann ich das ganze ja mit "if "zeichen" in data" prüfen.
    Aber wie kann ich dann den ersten Datensatz in eine neue Variable speichern und wieder weiter nach Datensätzen "hören"?

  • Wieso machst du dieses wilde while-Konstrukt um deinen socket-Call herum? Das ist *NICHT* der Teil, der eine konkrete, ggf. temporaer nicht erreichbare Adresse anspricht. Wo man ggf. etwas Robustheit wollen wuerde.

    Wenn der Versuch, ueberhaupt einen Socket zu erzeugen fehlschlaegt, dann hat dein System ein mords Problem, und dein Programm sollte sich beenden. Und dein Rechner neu gestartet werden aller Wahrscheinlichkeit nach.

    Zu deinem Programmierproblem: du musst die ankommenden Daten in einem Buffer aufsammeln, bist du dein Trennzeichen gefunden hast. Dann kannst du sie an diesem Zeichen Trennen, und die fertige Nachricht verarbeiten. Den Rest musst du aufbewahren, bis wieder genug Daten da sind. Es gibt ausserdem noch zwei extra Komplikationen:

    - beim ersten Verbindungsaufbau weist du nicht, ob du mitten im senden bist. Das ist zwar unwahrscheinlich, sollte aber entweder geklaert werden, oder prophylaktisch das erste Datenpaket verworfen werden.
    - es ist moeglich, dass du mehrere Datensaetze auf einmal bekommst, auch den Fall musst du abfangen.

    Solange du nicht monstroes viele Daten verarbeitest, kann dein Buffer ein einfacher Bytestring sein. Den zu verarbeiten erfolgt mit seinen ueblichen String-Methoden wie zB split. Wenn ich das machen wuerde, wuerde ich eine Klasse schreiben, in die ich Socket-Daten fuettere, und ueber deren aufgesammelte Datenpakete man iterieren kann.

  • Quellen habe ich nicht, man sammelt das so auf über die Jahre. Aber bestimmt gibt es da auch Leute die etwas dazu schreiben. Und das auseinandernehmen eines strings ist Einführungslevel. auch behandelt zB in Learn Python the hard way.

    Und es so viel code da draußen - such dich halt mal durch GitHub Python & socket sourcen.

    Und wenn du anfängst kommentiere ich auch deinen Code. Aber Programmier-mir-was mache ich nicht.

  • bootsmann das bringt ihn dahin, wo er gerade ist. Eine Einführung in Programmierung an sich ist es nicht, und sockets etc hat er ja laufen. Nur was mit den Daten machen - da muss dann schon echt programmiert werden, nicht nur Code geklau(b)t ;)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!