2

asioでデータをストリームに読み込む方法について少し混乱しています。私の主な質問は次のとおりです。

  1. 1台のコンピューターからの複数の非同期書き込みが同時に実行されており、受信側コンピューターで1回の非同期読み取りのみが行われている場合はどうなりますか。TCPプロトコルを介して、データがインターリーブされる可能性はありますか?
  2. ASIOライブラリは、読み取りストリーム内の新しいデータを処理するハンドラーをいつ呼び出すかをどのように認識しますか?受信したすべてのバイトを呼び出しますか?クライアントが切断したとき?
  3. asioを使用してtcpソケットから読み取るためのバッファーではなく、ストリームを使用する良い(そして単純な)例はありますか?

ありがとう。

4

1 に答える 1

4

1台のコンピューターからの複数の非同期書き込みが同時に実行されており、受信側コンピューターで1回の非同期読み取りのみが行われている場合はどうなりますか。TCPプロトコルを介して、データがインターリーブされる可能性はありますか?

別の非同期書き込み操作の進行中に呼び出した場合async_write、結果は未定義です。write()これは、2つの異なるスレッドから同じソケットで2つの同時syscallを実行することに似ています。ビッグデータを混乱させる可能性があります。

ASIOライブラリは、読み取りストリーム内の新しいデータを処理するハンドラーをいつ呼び出すかをどのように認識しますか?受信したすべてのバイトを呼び出しますか?クライアントが切断したとき?

を呼び出すとasync_read、要求された量のデータがすべて受信されたときにコールバックが呼び出されます。を呼び出すとasync_read_some、少なくとも1バイトあるときにコールバックが呼び出されますが、それ以上になる場合もあります。おそらく、もう一方の端から送信された単一のTCPパケットの内容です。

asioを使用してtcpソケットから読み取るためのバッファーではなく、ストリームを使用する良い(そして単純な)例はありますか?

つまりasio::iostream?asioのドキュメントにがあります。

于 2010-01-02T05:26:30.820 に答える