Laden...

Binärübertragung C# Server mit Java Client

Erstellt von Lenny vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.498 Views
L
Lenny Themenstarter:in
95 Beiträge seit 2009
vor 8 Jahren
Binärübertragung C# Server mit Java Client

Hallo,
für eine Robotikanwendung suche ich eine effiziente, binäre Übertragungsweise für Daten zwischen einem Server der in C# geschrieben wurden und einem Client in Java. Im Moment ist die Kommunikation in JSON umgesetzt. Da allerdings nun die Anforderung besteht auch Bilddaten zu übertragen fällt JSON hierbei komplett aus.

Schön wäre es natürlich auf C# Seite WCF benutzen zu können. Auf Java Seite habe ich damit aber leider eigentlich nicht so richtig was gefunden.

Kann mir jemand von euch etwas gutes dazu empfehlen ?

6.911 Beiträge seit 2009
vor 8 Jahren

Hallo Lenny,

Da allerdings nun die Anforderung besteht auch Bilddaten zu übertragen fällt JSON hierbei komplett aus.

Komplett fällt sie nicht aus, denn die Bilddaten könnten z.B. als base64 kodierter String im JSON übergeben werden. Da du aber auch von Effizienz geschrieben hast, wäre zu prüfe ob das noch effizient genug ist.

auf C# Seite WCF benutzen zu können

Wenn die "Gegenseite" Java ist, so macht WCF nur bei einer Bindung gem. WSDL sinn. D.h. dann wärst du auf HTTP-Bindung beschränkt und dort wird nach XML serialisiert. Somit ist i.d.R. wohl JSON effizienter.

Solltest du wirklich binär übertragen wollen, so musst du dir für diesen Anwendungsfall (C# <-> Java) ein eigenes Protokoll überlegen wie die Daten binär geschrieben und gelesen werden. Siehe hierzu auch [FAQ] TcpClient: einfaches Beispiel, [Tutorial] Client-/Server-Komponente über TCP-Sockets

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

L
Lenny Themenstarter:in
95 Beiträge seit 2009
vor 8 Jahren

Hallo das Beispiel ist mir bekannt und die Möglichkeit eines eigenen Protokolls auch. Das war jedoch das was ich vermeiden wollte.
Deshalb hatte ich die Hoffnung auf beiden Seiten eventuell schon auf fertige Frameworks bzw. Libraries zurückgreigen zu können.

D
152 Beiträge seit 2013
vor 8 Jahren

Vielleicht ist ja auch BSON eine Alternative.

Für C# gibt es ja Newtonsoft.Json.Bson.

742 Beiträge seit 2005
vor 8 Jahren

Protobuf: https://github.com/google/protobuf

Sehr schnelles und einfaches Binärformat, verwenden wir hier für interne Kommunikation überwiegend auch. Gibt Implementierungen für Java und C# und eine Beschreibungssprache mit deren Hilfe Serialisierungsklassen generiert werden können (analog zu XML Schema oder XSD).

W
955 Beiträge seit 2010
vor 8 Jahren

.. die Komprimierungsmöglichkeit (ZipStream) eines textbasierten Protokolles wie JSON sollte ebenfalls noch erwähnt werden.

L
Lenny Themenstarter:in
95 Beiträge seit 2009
vor 8 Jahren

Hallo,
vielen Dank für die vielen Antworten. Insbesondere das BSON finde ich aufgrund der vielen bereits vorhandenen Implementierungen für andere Sprachen als interessante Alternative und werde mir das genauer anschauen.

Nun ist mir allerdings noch eine weitere Idee gekommen wie man die Übertragung effizienter gestalten kann und würde gerne eure Meinung dazu hören.
Man könnte beim bisherigen JSON bleiben und die großen Datenfelder binär z.B. in base64 codieren. Hierbei stelle ich es mir jedoch schwierig vor dem .Net JSON Serialisierer soetwas beizubringen ohne am Schluss selber großartig am String rumpfuschen zu müssen.

S
417 Beiträge seit 2008
vor 8 Jahren

Hallo,

durch die Konvertierung nach base64 steigt die Datengröße etwa um 1/3 an, was nicht Effizienz-förderlich ist.

L
Lenny Themenstarter:in
95 Beiträge seit 2009
vor 8 Jahren

Im Vergleich dazu die Daten in JSON Dezimal darzustellen sinkt sie aber. Dass ein reines Binärprotokoll effizienter ist, ist klar.