1

socket.Receive(Buffer)を呼び出すと、特定のバイト数が読み取られるまで呼び出しがブロックされる方法はありますか?そうでない場合、受信ループを作成する一般的な方法は何ですか?

4

1 に答える 1

2

通常、オフセットとカウントを受け入れるオーバーロードを使用し、十分になるまで手動でループ(戻り値をチェック)する必要があります。例えば:

void ReadExact(Socket socket, byte[] buffer, int offset, int count) {
    int read;
    while(count > 0 && (read = socket.Receive(
       buffer, offset, count, flags)) > 0)
    {
        offset += read;
        count -= read;
    }
    if(count > 0) throw new EndOfStreamException();
}

ソケットをでラップすると、これも少し簡単になる可能性がありますNetworkStream

于 2012-08-05T15:12:53.673 に答える