2013-01-08 156 views
-1

.Net的TcpClient允許我測試是否可以建立連接,因此,讓我知道遠程端口是否打開。.NET TcpClient連接不會拋出異常

檢查這個代碼:

TcpClient tcpCLient = new TcpClient(); 
     try 
     { 
      tcpCLient.Connect("www.google.com", 80); 
      Console.WriteLine("Yes"); 
      Console.ReadLine(); 

     } 
     catch (Exception) 
     { 

      Console.WriteLine("No"); 
      Console.ReadLine(); 
      throw; 
     } 

我測試www.google.com的TCP端口80和,因爲它是打開我的控制檯「是」的消息見。 現在,我將嘗試關閉www.google.com的TCP端口70。

TcpClient tcpCLient = new TcpClient(); 
      try 
      { 
       tcpCLient.Connect("www.google.com", 70); 
       Console.WriteLine("Yes"); 
       Console.ReadLine(); 

      } 
      catch (Exception) 
      { 

       Console.WriteLine("No"); 
       Console.ReadLine(); 
       throw; 
      } 

我期望的異常,所以我建議立即進行刪除在控制檯中看到一個「否」。爲什麼沒有發生? 謝謝!

更新: 控制檯即使在幾分鐘後仍保持這種方式。 enter image description here

+0

你可以擴展'沒有任何反應'。你有沒有收到任何消息。您等了多久,可能會有超時和重試問題 – pm100

+0

@ Pm100完成。謝謝。 –

+1

我看到同樣的東西 - 你得等幾分鐘。原因幾乎肯定是由於谷歌防火牆,他們丟包意外的端口 - 這看起來像一個傳輸錯誤,所以你會得到重試。嘗試對非防火牆機器(例如本地主機)進行相同的測試,它會立即失敗,因爲主機拒絕關閉端口 – pm100

回答

0

@ pm100給我一個commments的答案。

「原因幾乎可以肯定是由於谷歌防火牆,他們丟棄數據包的意外端口 - 這看起來像一個傳輸錯誤,所以你會得到重試,嘗試相同的測試非防火牆機器(例如本地主機),它會因爲拒絕主機拒絕關閉端口的請求「

幾分鐘後您會看到」否「。

0

簡而言之:爲什麼你throw例外,一旦你抓住了嗎?

這可能是掛起控制檯應用程序的原因,因爲它正在等待超時。另外,如上所述,它可能是遠程地址中的防火牆,因爲它可能會丟掉你的呼叫。 如果您還有其他特定的例外情況,請告訴我。

此外,希望您的代碼處理套接字異常,因爲它是客戶端嘗試連接時的常見異常。這裏是一個相關的職位 - C# SocketException doesn't get caught

+0

謝謝。我不認爲這個問題是因爲拋出,你看到了相同的行爲。 –

+0

的確,我在我的回答中也提到過。 –