NetworkStream.CanRead возвращает true, но буфер не возвращает значение - PullRequest
2 голосов
/ 17 ноября 2009

У меня есть цикл do while, который читает буфер из объекта NetworkStream условие while равно networkStream.CanRead, поэтому, пока оно может читать, оно должно продолжать чтение из буфера. Единственная проблема - когда я читаю из буфера и конвертирую в строку, в ней ничего нет. то есть его пусто.

Почему это случилось?

Это приложение ASP.NET (VS2005)

@ dtb Информация о коде:

Я передаю объект NetworkStream networkStream

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

    ReadMessage(networkStream);
}

Забавно, что если он снова подключается и снова подключается, Send / Read работает нормально. Может ли это быть проблемой с Send (я не получаю исключений) или с повторным использованием объекта NetworkStream. Это нормально работает локально на тестовом TCP-сервере, но я получаю вышеупомянутую проблему, когда в работе (Windows Server 2003) (то есть не могу прочитать что-либо из потока - пока я фактически не отключаю время (выход из цикла) после 10s)

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);
    }
}

1 Ответ

4 голосов
/ 17 ноября 2009

CanRead является статическим значением, которое указывает, способен ли поток быть прочитанным. Свойство DataAvailable сообщит вам, готовы ли данные для чтения.

...