Я не могу прочитать полный вывод из гнезда
Итак, iv сделал своего рода удаленного оператора команды. он состоит из 2 секций сервер и клиент клиент посылает команду сервер выполняет ее и возвращает результат.
теперь для некоторого резонанса я не могу прочитать весь вывод, я могу прочитать только несколько строк, а затем он просто ждет тайм-аута.
я посылаю вывод команды примерно так "[CommandName:PID]:OneLineOfOutput\n", а затем это повторяется для каждой строки, которую выдала команда
а потом я пытаюсь читать эту строку за строкой, и когда мне нечего читать, я тайм-аут процесса чтения и жду новой команды для отправки на сервер.
вид материала, который его мент выводит, выглядит следующим образом
[ListCmds:1232]:ListCmds:0 [ListCmds:1232]:Shutdown:1 [ListCmds:1232]:FullSysShutdown:2 [ListCmds:1232]:Restart:3
и вот что я вижу на консоли
[ListCmds:1232]:ListCmds:0 [ListCmds:1232]:Shutdown:1
кажется, что он просто пропускает 2 строки.
мой код потока чтения
private static void ReturnManager(Socket Soc) { //Thread.Sleep(100); using (StreamReader RS = new StreamReader(new NetworkStream(Soc))) { DateTime TMR = DateTime.Now; while (true) { if (RS.Peek() > 0) { Console.WriteLine(RS.ReadLine()); TMR = DateTime.Now; } if (!Soc.Connected) { break; } if (DateTime.Now - TMR > TimeSpan.FromSeconds(LastReadTimeoutSeconds)) { break; } Thread.Sleep(20); } } Soc.Close(); Soc.Dispose(); }
теперь, прежде чем вы спросите, я действительно убедился, что все данные были отправлены через сокет на стороне serer, просто он не был полностью прочитан клиентом.
Что я уже пробовал:
я попытался добавить таймер ожидания к началу, но это не решает проблему, а просто затрудняет ее выполнение.