4

ソケットの読み取りバッファを空にしたいので、次のコードを記述しました...

byte[] tempBuffer = new byte[1024];
int readCount = 0;
while ((readCount = tcpSocket.GetStream().Read(tempBuffer, 0, tempBuffer.Length)) != 0)
{
    // do with tempBuffer
}

しかし、Read()メソッドがブロックされているため、tcpSocket.ReceiveTimeout=1を追加しました。。そして、それは以前と同じように機能します。

私が知っているように、これは通常C++で使用されます。どうすればこの問題を解決できますか?

4

3 に答える 3

7

Read メソッドを呼び出す前に、 DataAvailableプロパティを使用して、読み取るものがあるかどうかを確認できます。

于 2009-06-17T10:16:59.737 に答える
2

を使用するNetworkStream.Read()代わりに、関数を直接使用しGetStream()ます。

読み取りに使用できるデータがない場合、Read メソッドは 0 を返します。Read操作は、サイズ パラメーターで指定されたバイト数まで、使用可能なデータをすべて読み取ります。リモート ホストが接続をシャットダウンし、利用可能なすべてのデータが受信された場合、Read メソッドはすぐに完了し、0 バイトを返します。注注:

于 2009-06-17T10:16:52.420 に答える
1

なぜ読み取りバッファを空にしたいのですか? ソケットの内容が不要な場合は、ソケットを閉じます。現在のコンテンツは必要ないが、後のデータが必要な場合は、いつ後で開始するかをどのように知ることができますか。データがカプセル化されていないストリームの場合...

間違った方法で問題を解決しているように聞こえます。

于 2009-06-17T10:18:09.033 に答える