2016-03-21 10 views
5

Ich habe einen C-Socket-Server, der XDR-Daten empfängt. Ich habe einen C- und einen Java-Client geschrieben. Ich versuche, einen Python-Client mit xdrlib zu schreiben.Python XDR TCP-Stream

import xdrlib 

p = xdrlib.Packer() 
p.pack_int(5) 
p.pack_int(4) 
p.pack_int(3) 
data = p.get_buffer() 

Wenn ich dies über den Server dekodiere, sind die Daten unterschiedlich. Dies liegt daran, dass Daten codiert sind, um über einen xdrmem-Decoder gelesen zu werden. (Sie haben keinen Anfang und Ende der Aufzeichnung).

Weiß jemand, ob es eine Bibliothek für Python gibt, die die Erstellung von xdr-Datensätzen unterstützt? In c geschieht dies über xdrrec_create und in Java XdrTcpEncodingStream.

+0

Minimale Paketlänge, Paketblockgröße. Sie müssen ein Paketmuster für die globale Verwendung erstellen. Jedes Paket enthielt eine Blockdefinition. Kommunizieren Sie nicht ohne Headerdefinition. – dsgdfg

+0

Entschuldigung ... können Sie Ihren Kommentar anders formulieren? Ich habe nicht bekommen, was Sie erklärt haben ... – Stefano

Antwort

-2

Ich sehe meistens xdrlib ist das meist verwendete Paket. Wenn Sie Prozesse haben, die in C oder Java durchgeführt werden können, können Sie sie einfach in c/java ausführen und in Python verwenden, indem Sie die von erstellte Schnittstelle verwenden. Lassen Sie mich wissen, ob mein Verständnis dem Szenario nicht entspricht.

+0

naja ... ich habe Swig in der Vergangenheit benutzt, aber wenn ich die C-Bibliothek benutze, verwendet xdrrec_create verschiedene Callbacks zum Retraven der Daten. Ich fürchte, das wird nicht so einfach in Python zu mappen sein. Ich habe nicht versucht, die Java-Version zu umgehen. Wenn ich ein Python-Modul finden kann, das meinen Bedürfnissen entspricht, bevorzuge ich es anders. Ich denke, ich bleibe einfach bei Java, um meinen Client zu schreiben (oder wickle die Java-Bibliothek in swig für python) – Stefano

+0

er sucht nach einem Python-Modul. Swig ist immer eine Lösung, aber nicht das, wonach er fragt – Cristas