0

TCP ソケット経由で Java クライアントから C サーバーにいくつかの複雑なオブジェクトを送信したいと考えています。

どうやってやるの ?

4

3 に答える 3

4

基本的に問題は、「言語にとらわれない方法でオブジェクトをシリアル化/逆シリアル化する方法は?」具体的には、あなたの場合は Java と C です。このデータをネットワーク経由で送信するため、ネットワークの順序/エンディアンの問題に注意することも重要です。

クライアントとサーバーの両方にアクセスできると仮定します。これは、データをシリアル化する方法を選択できることを意味します。(そうでない場合、答えは簡単です。他の人が期待しているものの仕様に合わせて書いてください)

個人的には、Protocol Buffersを使用します。Java バインディングC バインディングがあります。

Protocol Buffers が気に入らない場合は、次のような他のオプションがあります。

于 2012-04-18T23:28:28.540 に答える
3

Java オブジェクトのフィールドを文字列 (おそらくJSON ) に書き込み、TCP 経由で送信し、C プログラムに文字列を読み取らせ、それを使用して相手側で新しい C 変数を初期化します。

于 2012-04-18T22:38:29.393 に答える
1

この質問はかなり古いものですが、まだ良い解決策を探している人がいる場合に備えて、@Adam Liss による以前の回答で述べたように、プロトコル バッファの実装を試すことができます: (developers.google.com/protocol-buffers /)

つまり、プロトコル実装のように複雑なメッセージ タイプを定義すると、ツールはそれをシリアル化および逆シリアル化できる C++/Java/Python コードを生成します。

C コードを使用した同じ目的のために、ドイツのミュンヘン工科大学 (TUM) の研究プロジェクトは、組み込み C プロジェクトで使用できる標準 C のコード ジェネレーターを作成しました。これは、Google の protobuf 実装と完全に互換性があります (C 構造体による制限があります)。これは、リンクするライブラリを必要としないため、 C バインディングよりもうまく機能します。サポート ライブラリとリンクする必要があるため、使用している組み込みシステムでC バインディングを動作させるのに問題がありました。

これにより、組み込みシステムと Android アプリ (Java)/デスクトップ アプリ (C++/Qt) の間で複雑なネットワーク データ (要求応答) を渡すという、組み込みプロジェクトでの (苦痛な) 1 日を節約できました。

于 2014-09-01T13:29:03.307 に答える