Измените l oop следующим образом:
using (var reader = new StreamReader(stdin))
{
var offset = 0;
while (offset < length && reader.Peek() >= 0)
{
offset += reader.Read(buffer, offset, length - offset);
}
}
Для изменения ключа используется offset < length
в условии while
, чтобы reader.Peek()
не вызывался после того, как все ожидаемые символы были читать. Эта версия также обрабатывает reader.Read()
, возвращая менее length
символов, так что для чтения всего сообщения требуется несколько циклов. Я не знаю, может ли это произойти. В целом, однако, метод чтения потока может не вернуть все запрошенные символы.
Обновленный l oop работает, поэтому я ответил на последний из моих вопросов, Что я могу сделать, чтобы избежать зависания?
Я предполагаю, что reader.Peek()
зависает при чтении сообщения Firefox из-за некоторой разницы между тем, как Chrome и Firefox обрабатывают поток на их стороне. Лучшее понимание этого, вероятно, ответило бы на мои первые два вопроса.
Я до сих пор не понимаю, почему все примеры, которые я нашел в stackoverflow и в других местах, использовали первую версию чтения l oop и никто другой упомянутые зависания. Я знаю, что Chrome уделяется гораздо больше внимания, чем Firefox, так что это может быть, или, возможно, большинство приложений, использующих собственный обмен сообщениями, используют короткие сообщения или оба.