0

UNIXソケット(TCPローカル)に少し混乱しています

私はサーバークライアントを持っています:

  • クライアントは、ソケットによって ( を使用して) サーバーにいくつかの情報をsend何度も送信します
  • サーバーはこのデータを出力します (サーバーはそれを受け取るために呼び出しますrecv)。

問題は、サーバーがクライアントによって送信された最後の情報だけでなく、このクライアントからの古い情報 (破損している場合もあります) も出力することです。そのため、クライアントによって書き込まれた以前のすべてのデータがソケットに何らかの方法で蓄積されていると思います。

サーバーがクライアントから最後のデータのみを受信するにはどうすればよいですか? どうにかしてソケットをクリーンアップする必要がありますか、それとも常に閉じて新しい (かなり悪いソリューション) を作成する必要がありますか?

4

3 に答える 3

3

TCP ソケットはストリーム ソケットです。
これは、送信するすべてのデータが一連のメッセージとしてではなく、一連のバイトとして扱われることを意味します。バイトは追加や省略なしで順番に受信されますが、必ずしも同じチャンクであるとは限りません。

たとえば、クライアントが毎回 1000 バイトで 3 回呼び出した場合、データが返されるsend回数はわかりません。recv3回、それぞれ1000バイトを返すか、3000バイトで1回だけ、または理論的には毎回1バイトで3000回も返す場合があります。

于 2013-04-26T20:12:06.413 に答える
1
  1. tcp はストリーム プロトコルです。

  2. send と recv の戻り値をチェックし、エラーが適切に処理されていることを確認します。

  3. 印刷したものが送信したものであることを確認し、バイナリの内容と長さで送信および受信バッファーを確認します。

送信者側で送信したものが受信者側で得られるものであることを確認してください。

そして、コードの一部は、さらなる分析のために高く評価されています。

于 2013-04-27T05:17:57.597 に答える