2

オブジェクトからバッファーを読み取る do while ループがあります。whileNetworkStream条件はnetworkStream.CanRead、読み取り可能な限り、バッファーからの読み取りを続行する必要があります。唯一の問題は、バッファから読み取って文字列に変換するときに何もないことです。つまり、空です。

なぜそれが起こるのでしょうか?

これは ASP.NET(VS2005) アプリケーションです

@dtb コード情報:

私はNetworkStreamオブジェクトを渡していますnetworkStream

// between 2 functions in a loop
{
    SendMessage(networkStream, message);

    ReadMessage(networkStream);
}

面白いことに、再接続して再度接続すると、送信/読み取りは正常に機能します。実際にSend(ここでは例外はありません)またはNetworkStreamオブジェクトの再利用に問題がありますか。これはテストTCPサーバーでローカルに正常に動作していますが、本番環境(Windows Server 2003)で上記の問題が発生しています(つまり、ストリームから何も読み取れません-実際にタイムアウトするまで(ループを終了するまで) 10秒)

ReadMessage(networkStream)
{
    if (networkStream != null && networkStream.CanRead)
    {
        byte[] myReadBuffer = new byte[1024];
        StringBuilder myCompleteMessage = new StringBuilder();

        do
        {
            int numberOfBytesRead = networkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
            string messageRead = Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead);
            myCompleteMessage.Append(messageRead);
        } while (networkStream.CanRead);
    }
}
4

1 に答える 1

4

CanReadストリームが読み取り可能かどうかを示す静的な値です。このDataAvailableプロパティは、データを読み取る準備ができているかどうかを知らせます。

于 2009-11-17T03:13:36.180 に答える