В моем коде происходит действительно странная ситуация. Я разрабатываю клиент-серверное приложение для чата на С #. Когда я закрываю сервер, я хочу, чтобы клиент закрывался автоматически. Клиент читает из объекта TcpClient с помощью StremReader. Клиент находится в цикле while, где он читает строку (StreamReader.ReadLine ()), а затем выполняет некоторые операции с этой строкой. Когда serever закрывается, я также закрываю серверную часть TCP-соединения. Итак, я ожидаю, что клиент увидит SocketException, вызванный строкой чтения, поймает его и выйдет. Но исключение не улавливается! Вот код клиентского цикла:
while (true)
{
try
{
ricev = read.ReadLine();
}
catch(SocketException exc)
{
//It never gets in here
}
chat.Invoke(showMessage, ricev);
}
Когда я закрываю сервер, Visual Studio сообщает мне, что в System.dll возникло первое исключение «System.Net.Sockets.SocketException», но я не могу его уловить. Почему так происходит? Я также пытался поймать любое общее исключение с помощью блока
catch
{
}
, но это тоже не сработало.
Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ: после нескольких попыток я действительно обнаружил, что SocketException не работает. вообще не воспитываюсь. Это так странно, как я сказал в комментарии, в противоположной ситуации, когда клиент закрывается раньше сервера, возникает исключение, и я могу его остановить. Я действительно не знаю, что происходит ....