У меня есть цикл while, который считывает буфер из объекта NetworkStream
Условие while равно networkStream.CanRead
, пока оно может читать, оно должно продолжать чтение из буфера. Единственная проблема - когда я читаю из буфера и конвертирую в строку, в ней нет ничего. т.е. пустым.NetworkStream.CanRead возвращает true, но буфер не возвращает значение
Зачем это произошло?
Это ASP.NET (VS2005) применение
@dtb Код Info:
Я передаю в 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);
}
}
Обратите внимание: что он прочитал сообщение в первый раз, после того, как другой запрос данных отправлен в том же сетевом потоке, это происходит на втором ходу – soldieraman
@soldieraman: Если ответ darkassassin93 не отвечает на ваш вопрос, пожалуйста, покажите нам свой код. У меня такое ощущение, что вы принимаете вещи о границах пакетов и/или количестве байтов, возвращаемых методом 'Read', который может быть неправильным. – dtb
@dtb помещает некоторую информацию о коде – soldieraman