2011-02-11 6 views
0

Sir、 TCPソケットを使用して文字列を別のシステムに送信しています。私は8つのボタンを取った。各ボタンをクリックすると、同じ文字列が同じソケットを使用して同じIPとPORTに送信されます。ソケットは起動時に一度指定されたIPに接続されます。今、2番目のシステムでパケットを分析しています(パケットアナライザを使用しています)が、データを正しく見つけることができませんでした。 問題:1つのボタンをクリックしてパケットを分析しても問題ありません。私はパケットとデータ部分が別々に見つかった。その罰金をやめた。ちょうど1つのヘッダー部分がある間、私が3つまたは4つのボタンをクリックした後、パケットアナライザでパケットを分析すると、データ部分の下に接続されたすべての文字列(クリックされたボタンから)が見つかりました。クリックごとに異なるパケットが必要です。つまり、各文字列を別のパケットにカプセル化する必要があります。 何が問題なのですか? 返信してください...ありがとう.....tcpパケットを適切にキャプチャする際の問題

答えて

2

いいえ、tcpはストリームプロトコルです。データを片方のチャンクに入れますが、データがリモートエンドに到着すると、これらのチャンクの境界は消えてしまいがちです。

tcpを使用する必要がある場合は、いくつかの選択肢があります。

  1. データの長さを含むヘッダーを各チャンクに付加し、送信キューをフラッシュし、リモートエンドでヘッダーだけを読み取り、それを使用してさらにデータを読み取ります。
  2. 基本的なhttpプロトコルのように、すべてのパケットに対して新しいtcp接続を作成します。
  3. すべてのチャンクを同じサイズ(40バイト)とし、リモートエンドでそれをexaxctly読み込みます。

ところで、おそらく、ソケットあたり1つの書き込みスレッドしかないようにする必要があります。

+0

デバイスに接続されているため、パケットごとに新しいTCp接続がデバイスをダンプする可能性があります。私はヘッダーを先頭に付けたすべてのパケットを送信する必要があるとは思わない。データをパケットにカプセル化するOSの義務。そして、もう一方の端でそれを抽出します。 – himanshu

+0

各データチャンクはレイヤーごとカプセル化されなければならず、もう一方の端で抽出を実行する必要があります。だから私はpacktアナライザを使用する場合、私は、ヘッダー、データ....ヘッダー、データ、ヘッダー、データ...各パケットの表示する必要があります。 – himanshu

+0

は、標準サイズのTCPパケットにデータ部分が固定されていると考えているのと同じサイズです。 TCPパケットのDATA PARTの長さに応じて文字列(バイト)を分割することはOSの義務です。 – himanshu

関連する問題