我的代码中有一个非常奇怪的情况。我正在开发 ac# 聊天客户端-服务器应用程序。当我关闭服务器时,我希望客户端自动关闭。客户端正在使用 StremReader 从 TcpClient 对象中读取。客户端处于一个 while 循环中,它读取一行(StreamReader.ReadLine()),然后对其读取的行执行一些操作。当服务器关闭时,我也会关闭服务器端的 tcp 连接。所以,我希望客户端看到由 readline 引起的 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”第一次机会异常,但我无法捕捉到它。为什么会这样?我还尝试用 a 捕获任何通用异常
catch
{
}
块,但这也不起作用。
任何帮助将不胜感激!
编辑:在尝试了更多次之后,我实际上发现 SocketException 根本没有被提出。这太奇怪了,正如我在评论中所说,在相反的情况下,当客户端在服务器之前关闭时,会引发异常并且我可以解决它。我真的不知道发生了什么事......