2016-08-02 6 views
0

私はC言語を使用してalljoynアプリケーションを開発しようとしています。私は基本的なチュートリアルを理解し、実装し、それをカスタマイズし、サーバーとクライアントの両方でアプリケーションを構築することができました。今、私の開発の第2の部分が、ファイル転送サーバーとクライアントをプログラムし、ファイルを読み込んでalljoynバスの応答に書き込むようにプログラムします。AlljoynのバスメッセージにNULL文字の問題

Alljoyn応答は65536バイトしかないので、サーバーとクライアントの間で自分のプロトコルをフレーム化して、サーバーがメッセージを分解し、クライアントがメッセージのチャンクを順番に受信します。今私はここで私が簡単に説明したい問題に直面しています。

(1)私がテキストメッセージを送信すると、それらは完全に受信されます。

(2)バイナリデータを送信すると、データが失われます。私の理解は、alljoynバスの返信は文字列であり、NULLを受け取るたびに、その後のすべての文字は受信者側で0として読み込まれることです。

これを軽減するために行うべきこと。

私のバイナリデータ文字列のNULL文字をマスクする方法があるかどうか、または私自身が守っている方法に欠陥があるかどうかを知りたい。

私はこのalljoynフレームワークを使い始めました。私は非常に初心者です。どんな助けでも大いに役立つでしょう。

答えて

0

バイナリデータとして送信するには、バイト配列( 'ay'の署名)を使用する必要があります。そうすれば、alljoynが文字列を切り捨てるのを防ぐことができます。 AllJoynは、使用していることを伝える限り、バイナリデータを処理できます。

+0

こんにちは、あなたの提案を理解していますが、alljoynバスで2つの返信を定義できるかどうかを明確にしてください。 1つは文字列、もう1つは符号なし整数の配列です。これは私がやっていることです。 //// status = alljoyn_msgarg_array_set(outArg、&numArgs、 "say"、size_of_segment、segment_data); ////これはパラメータを設定せず、////エラーが多すぎます。配列要素が多すぎます - アドレス:ER_BUS_BAD_VALUE ////。少し明確にしてください。 – Harsha

+0

もっと簡単な言葉で言えば、整数を渡すことはできますが、uint8_tは渡すことはできません。サーバーとクライアントの両方でエラーは表示されませんが、符号なし整数の場合はクライアント側で0が返されます。今、私は署名 'ai'または 'ay'を持つ配列を渡そうとしているときにエラーが発生しています{{{{アドレスが多すぎます:ER_BUS_BAD_VALUE}}}最大配列サイズを超えた場合に発生し、ALLJOYN_MAX_ARRAY_LENが131072であることをチェックすることができます。しかし、同じエラーが発生する256個の配列の配列を使用しています。 – Harsha