【问题标题】:C# Try-catch does not catch the exceptionC# Try-catch 不捕获异常
【发布时间】:2013-12-05 08:20:35
【问题描述】:

我有一个令人困惑的问题,我无法解决它。我有几行代码,在某些时候,Send 函数会抛出一个System.Net.Sockets.SocketException。但是,即使 try 有 catch 块,它也不会捕获异常并继续正常流程。当我尝试运行需要抛出相同异常的情况时,catch 可以很好地捕获它。

我尝试过的事情:

  • 尝试更改 VS 调试设置“仅为我的代码启用”,但是 它已经被禁用。
  • 我尝试了调试和发布模式。
  • 我尝试使用一般的异常捕获器,但它们都不起作用。

这里是代码,在某些时候,来自服务器的连接关闭并且c Socket 断开连接。它返回System.Net.Sockets.SocketException,但下面的catch 没有捕获它。

            try
            {
                // Some code here . . . 

                c.Send(clientData);
                Print("Started uploading the file " + uploadFilename + ".");
                upBox.Text = "";
                Print("Finished uploading the file " + uploadFilename + ".");
            }
            catch (System.Net.Sockets.SocketException)
            {
                Print("You are disconnected from server!");
            }

【问题讨论】:

  • 如果没有捕获异常,你怎么知道它发生了?您是否从 Windows 收到“程序停止工作”的提示?
  • 我从监视菜单中通过断点和检查看到了异常。在监视面板中,当我编写 c.send(clientData) 时,我可以看到异常而不是发送的字节数。
  • 所以当你的程序没有运行时发生了异常。这就是您所说的异常发生的“某个时刻”。您的程序没有导致异常。在这种情况下,您尝试执行的操作可能无效。
  • 是的,我的程序不是异常的来源,服务器才是。有没有办法解决这个问题并抓住它?
  • 但是你的代码没有抛出异常,那么为什么需要为你的程序修复这个异常呢?为什么您认为这是服务器,而不是您在程序中的断点并尝试通过监视窗口中的套接字发送数据的事实?你以前能做到这一点吗? (完全披露:并不是说我知道一种或另一种方法,我从未尝试过)

标签: c# sockets exception error-handling try-catch


【解决方案1】:

你没有得到异常的原因...... ……是不是没有发生异常!

TCP/IP 本身不一定会“注意到”断开连接...除非您明确尝试写入已关闭的套接字。

一定要看看 Beej 的网络编程指南:

另见:

【讨论】:

  • 我可以看到监视菜单抛出的异常。这是否意味着发送命令没有抛出异常?
  • 发送命令 did 抛出异常,只是不是上面代码中的调用 - 而是在监视窗口中尝试执行该方法。
猜你喜欢
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2015-06-21
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
相关资源
最近更新 更多