2013-11-21 105 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