Senden und Empfangen von Arrays über Sockets

8

Ist es möglich, ein Array über UDP Sockets mit Python zu senden? Ich benutze Python 2.5 und versuche, ein einfaches Array zu senden, aber es funktioniert nicht. Es kann das Array erfolgreich senden, aber wenn ich versuche, es mit einem Element des Arrays zu drucken, stürzt das Programm ab. Ich bin mir nicht sicher, was der Fehler ist, da ich vorsorglich die Daten in ein Array umwandele, aber es funktioniert nicht. Hoffe, ich habe das Problem so klar wie möglich erklärt. Ich würde die Hilfe schätzen!

%Vor%     
dawnoflife 18.08.2011, 12:00
quelle

6 Antworten

14

eval macht etwas völlig anderes als das, was Sie denken.

Um Daten über das Netzwerk zu senden, müssen Sie serialisieren es in ein Array von Bytes, dann deserialize es zurück. In Python kann die Serialisierung der meisten Objekte über pickle module:

erfolgen %Vor%

Deserialisierung:

%Vor%     
hamstergene 18.08.2011, 12:14
quelle
6

Ich würde persönlich tostring und fromstring verwenden. da die eingebauten Serialisierungsmethoden viel schneller sind Pickle unterstützt möglicherweise nicht NaN, Inf und andere undefinierte Werte.

    
Paul 18.08.2011 15:11
quelle
3

Sie könnten pickle das Array versuchen. Pickle ist eine Python-Bibliothek zum En- und Decodieren von Python-Objekten. Es kann viel mehr, aber es ist definitiv ausreichend, um Ihre Aufgabe zu erfüllen:

auf der Senderseite you pickle das Objekt auf eine Zeichenkette:

%Vor%

auf der Empfängerseite you unpickle das Objekt:

%Vor%     
Constantinius 18.08.2011 12:08
quelle
3

Sie versuchen, ein Python-Objekt über einen Socket zu senden, es ist normal, dass es nicht funktioniert, Sie können keine Objekte in einem Socket senden, Objekte sind keine Daten, sie sind die Darstellung einiger Daten in einem gegebene Programmiersprache. Sie müssen Ihr Objekt in Daten "übersetzen" und das Objekt aus den Daten auf der anderen Socket-Seite neu erstellen. Eine Möglichkeit dazu wäre das Modul pickle .

Auf der Clientseite "picken" Sie das Objekt:

%Vor%

Und auf der Serverseite "entpacken" Sie die empfangenen Daten:

%Vor%     
MatToufoutu 18.08.2011 12:10
quelle
1

Es ist eine Weile her, dass diese Frage gestellt wurde, aber ich dachte, es lohnt sich, die jsonsocket -Bibliothek zu teilen. Es macht es sehr einfach, Zeichenfolgen, Listen und Wörterbücher über Sockets zu senden. Es kann große Datenmengen effizient verarbeiten. Und Sie müssen keine manuelle Serialisierung / Deserialisierung durchführen. Unter der Haube serialisiert es die Daten als JSON-Strings auf dem Client und deserialisiert es auf dem Server.

    
Mouad Debbar 01.05.2014 06:01
quelle
0

Wenn Sie UDP nicht speziell benötigen, versuchen Sie zmqObjectExchanger ( Ссылка ). Es umschließt Pickle und zmq, um Python-Objekte über TCP zu übertragen.

    
ZdenekM 26.06.2015 12:57
quelle

Tags und Links