1

ソケット接続が開いている間に TCP ソケットから読み取るときに EOF を検出する方法はありますか?

私が見た例のほとんどは、次のようなものです。

int n=0;
While((n = read.inStream(data)) != -1){
    destType.write(data, 0, n);
}

ただし、これは、新しいデータを受信するたびに新しい接続を作成する必要があることを意味します. 私の場合、これはソケットを介してバイトとして送信される画像の一定のストリームであり、すべての画像を単一のユーザーに関連付けることができるように、接続を閉じることなく各画像を処理したいと考えています。高頻度で接続を常に開いたり閉じたりしない方が効率的です。

それで、これを行う方法や可能な代替案に関する情報はありますか?

4

1 に答える 1

1

いいえ - 接続が開いたままの場合、ストリームは最後に達していません。ストリームが EOFを報告し、後でより多くのデータを保持するという考えは、ストリームの原則に反します。

TCP ストリームを介して複数のメッセージを送信する場合、最も簡単な方法は、各メッセージに長さのプレフィックスを付けることです。

HEADER BODY
HEADER BODY
HEADER BODY

次に、クライアントはヘッダーを読み取り、メッセージの長さを調べ、それを読み取り、次のヘッダーを読み取ります。

于 2012-01-20T10:52:54.163 に答える