Это связано с тем, что .Net использует небезопасные методы для методов отправки и получения. Вы должны обработать свой программный код.
я действительно странная ситуация в моем коде. Я разрабатываю клиент-серверное приложение c # chat. Когда я закрываю сервер, я хочу, чтобы клиент автоматически закрывался. Клиент читает из объекта TcpClient, используя StremReader. Клиент находится в цикле while, где он читает строку (StreamReader.ReadLine ()) и затем выполняет некоторые операции со строкой, которую он читает. Когда сервер закрывается, я также закрываю серверную часть соединения TCP. Итак, я ожидаю, что клиент увидит исключение SocketException, вызванное readline, перехватит его и завершится. Но исключение не попадает! Вот код цикла клиента:
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 не поднимается вообще. Это так странно, как я сказал в комментарии, в противоположной ситуации, когда клиент закрывается перед сервером, возникает исключение, и я могу это сделать. Я действительно не знаю, что происходит ....