2017-12-29 25 views
0

Ich muss heterogene Daten von einem Matlab-Client an einen Server senden und empfangen. Die Daten umfassen 32-Bit-Ganzzahlen und 64-Bit-IEEE-Gleitkommazahlen. Denken Sie daran, dass TCP/IP nur Zeichen versteht, also muss ich diese Daten zusammen in ein zusammenhängendes Array packen, um es auszählen zu können. Nach Erhalt der Antwort muss ich die Byte-Daten aus dem eingehenden Zeichen-Array extrahieren und in Matlab-Typen umwandeln. Hat jemand eine Idee, wie man das macht?Heterogene Daten über TCP/IP

+0

"... TCP/IP versteht nur Zeichen ..." - das stimmt nicht. TCP/IP (eigentlich reden wir nur über TCP hier), senden alle gewünschten Bits ... die Codierung (manchmal "Zeichen") spielt keine Rolle. Wenn Sie die Daten in ein Byte-Array packen und in einen TCP-Socket schreiben können, ist alles in Ordnung. Klingt so, als ob Sie ein Protokoll benötigen, um Dinge zu packen und zu entpacken (serialisiert/deserialisiert). Es gibt viele Formate mit Bibliotheken zum Serialisieren von Daten. Um nur ein paar zu nennen: gRPC, MessagePack, BSON, Protobuf, Thrift, XML, JSON ... die Liste geht weiter. – marklap

+0

Ich muss dem widersprechen. Vom TCP-RFC: "Der TCP ist in der Lage, einen kontinuierlichen Strom von Oktetten in jede Richtung zwischen seinen Benutzern zu übertragen, indem er einige Oktette in Segmente für die Übertragung durch das Internetsystem packt." TCP nimmt also an, dass die Daten in einem Array von Oktetts oder Bytes oder Zeichen für die x86-Architektur kommen. In einer Sprache wie C oder Forth ist das Zusammensetzen (oder Serialisieren oder Multiplexen) sogar eines 64-Bit (oder 80-Bit, in Forth) IEEE-Real in eine Anordnung von Zeichen trivial. Aber in Matlab ist es nicht. Ich habe eine präzise, ​​zuverlässige Methode entwickelt, die zu meiner Anwendung passt. – AeroGuy

+0

Octets und Bytes sind äquivalent ja. Aber Charaktere sind nicht. Zeichen sind Bytes, die in einer bestimmten Reihenfolge und einem bestimmten Verfahren angeordnet sind - d. H. Codiert sind. TCP kümmert sich nicht um die Codierung. Es liefert nur Bytes - codiert oder nicht. – marklap

Antwort

0

der Oberbegriff für heterogene Daten in einen Strom von Bytes oder Zeichen Drehen ist Serialisieren (und umgekehrt, Deserialisieren).

Zwei weit verbreitete Formate für Daten in Textzeichen Serialisierung sind XML und JSON.

Wenn Sie auf der Mathworks-Website nach einem dieser Begriffe suchen oder diese Seite zusammen mit [matlab] nach diesen Begriffen durchsuchen, finden Sie zahlreiche Bibliotheken und Codebeispiele.

Oder seit R2016b verfügt MATLAB über integrierte Funktionen zum Serialisieren/Deserialisieren von JSON: jsonencode und jsondecode.

Verwandte Themen