2011-01-27 11 views
0

私はアンドロイドクライアントからPythonサーバーにtcpソケットを介して複数のデータ項目を送信しようとしています。クライアント側のユーザーは、複数の選択肢を作ることができるので、文字で送信された番号を使用して要求タイプを区別します。私は選択肢に応じて選択肢と特定のデータを送信しなければなりません。現在の選択肢(この場合は選択肢1)には選択肢と2つの文字列フィールドと画像が必要です。私は自分自身で画像転送を行い、それ自身で作業する選択肢を持っています。私が今問題を抱えているのは、選択したバッファの読み込みが、その直後のイメージのバイトストリームでも読み取られていることです。区別可能なソケット入力

答えて

2

TCPは、パケットが送信される前に書き込まれた場合、書き込みを1つのパケットにまとめます。つまり、情報は連結された状態で受信されます。

一般的な解決策は、データの前に「オペコード」を組み込むことです。 たとえば、整数を送信する前に接頭辞CHOICEを指定します。 PythonスクリプトでCHOICEを読むと、整数を受け取っていることが分かり、その分だけ多くのデータを読み取ることができます。 イメージを送信する前に、IMGと読み込むバイト数の接頭辞を付けます。このようにして、必要なバイト数だけ読み込み、次のオペコードを探します。

あなたのパケットは、このようになります。

CHOICE1IMG<number of bytes><image bytestream>は明らかにあなたのオペコードは、あなたが望むものは何でもすることができ、これは単なる一例です。

+0

こんにちはエリック、私に戻ってくれてありがとう。私はあなたの言っていることを得るが、私はちょうどそれについて最善の方法が行くだろうと確信していない?バイナリデータを含むたくさんの文字列にロット全体を変換して送信するのでしょうか? – Shpongle

+0

私はそれを理解しました。私はデータフィールドのサイズを制限し、それを埋めていなければそのサイズに埋めなければならなかった。私はそれを処理するためにパディングサーバー側を取り除いた。 – Shpongle

関連する問題