Запускаются клиент и сервер. Клиент цепляется к серверу, далее оба начинают слушать стрим на входящие сообщения.
Код прослушки:
private void Listen()
{
NetworkStream stream = _Client.GetStream();
var bf = new BinaryFormatter();
while (Listening)
{
if (stream.CanRead)
{
try
{
if (_Client.Connected)
{
object o = bf.Deserialize(stream);
var msg = (Message)o;
if (_Answers.ContainsKey(msg.Guid))
{
_Answers[msg.Guid] = msg.Data;
continue;
}
if (_Messages.ContainsKey(msg.Guid))
{
new Task((_Messages[msg.Guid] as Action<object>), msg).Start();
continue;
}
Console.WriteLine("Сообщение не ожидалось");
}
else
{
Console.WriteLine("Отключено");
_Client.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(string.Format("Неизвестное сообщение. {0}", ex.Message));
}
}
System.Threading.Thread.Sleep(100);
}
}
Если я вырубаю сервер, то клиент выводит в консоль "Отключено" и все норм.
Проблема в том, что когда клиент завершает работу (закрываю форму или гашу процесс - не важно), сервер начинает беситься и спамить сообщения вот отсюда Console.WriteLine(string.Format("Неизвестное сообщение. {0}", ex.Message));
Их текст "Неизвестное сообщение. Конец потока обнаружен до завершения разбора".
Почему то _Client.Connected остается true, а стрим начинает получать какие-то сообщения, которые не может десериализовать, потому что они неполные.