2013-11-21 66 views
2

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

事情我已经尝试:

  • 试图改变VS调试设置“只启用对于我的代码”,但 它已经被禁用。
  • 我试过调试和发布模式。
  • 我试过使用一般的异常捕获器,但都没有工作。

这里是代码,在某些时候,从服务器的连接关闭和c套接字断开连接。它返回System.Net.Sockets.SocketException,但下面的捕获不捕获它。

  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!"); 
      } 
+0

如果不捕捉异常,你怎么知道它发生?你从Windows获得“程序停止工作”的事情吗? – Steve

+0

我看到从手表菜单中突破和检查引发的异常。在监视面板中,当我编写c.send(clientData)时,我可以看到异常,而不是发送的字节数。 –

+1

因此,程序未运行时发生异常。这就是你说例外发生的“某点”。你的程序不会导致异常。在这种情况下,你想要做的事可能无效。 – Steve

回答

1

你没有得到例外的原因... ...是没有例外发生!

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

绝对退房Beej指南网络编程:

参见:

+0

我可以看到手表菜单抛出的异常。这是否意味着发送命令没有抛出异常? –

+0

发送命令* did *抛出一个异常,而不是上面代码中的调用 - 但是通过在监视窗口中尝试执行该方法。 – Steve