none
如何透過C# 檢查連線網際網路是否正常,(非ICMP封包) RRS feed

  • 問題

  • 想請問如何透過C# 檢查連線網際網路是否正常~但不使用PING~因為有些地方會檔掉ICMP封包
    2009年10月8日 上午 03:16

解答

  • 方法很多, 重點就是要找一個(或數個)會在Internet上一直存在, 又會回應你電腦訊息的主機.
    提供一個用DNS類別 來處理的方式
    你可以使用 Dns. GetHostAddresses 方法 或 Dns. GetHostByAddress 方法
    去測試一個(或數個) DNS Server (如Hinet的DNS 或 SeedNet的DNS) 是否會回應訊息.
    當然這種方法不是 100% ,因為Hinet和SeedNet同時掛掉的機會也不是沒有, 所以多偵測幾個不同的點可以降低誤判機率
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    • 已標示為解答 weison 2009年10月9日 下午 02:56
    2009年10月8日 上午 03:49
    版主

所有回覆

  • Hi!

    可以試試看

    TcpConnectionInformation 類別 : 提供本機電腦上的傳輸控制通訊協定 (TCP) 連線資訊。
    http://msdn.microsoft.com/zh-tw/library/system.net.networkinformation.tcpconnectioninformation.aspx
    http://www.dotblogs.com.tw/chou/archive/2009/04/19/8053.aspx


    .NET菜鳥自救會 http://www.dotblogs.com.tw/chou/
    2009年10月8日 上午 03:25
    版主
  • bool ConnectionExists() 
    { 
    try 
    { 
    System.Net.Sockets.TcpClient clnt=new System.Net.Sockets.TcpClient("www.google.com",80); 
    clnt.Close(); 
    return true; 
    } 
    catch(System.Exception ex) 
    { 
    return false; 
    } 
    }


    Cmf.Net (C) 2009
    2009年10月8日 上午 03:30
  • 使佣  WIN API  Function

    using System ; 
    using System.Runtime ;
    using System.Runtime.InteropServices ;
    
    public class InternetCS
    {
    
    //Creating the extern function...
    [DllImport("wininet.dll")]
    private extern static bool InternetGetConnectedState( int out Description, int ReservedValue ) ;
    
    //Creating a function that uses the API function...
    public static bool IsConnectedToInternet( )
    {
    
    int Desc ;
    return InternetGetConnectedState( out Desc, 0 ) ;
    
    }
    
    }


    Cmf.Net (C) 2009
    2009年10月8日 上午 03:35
  • Hi,

    C# - How do I check for a network connection
    http://stackoverflow.com/questions/520347/c-how-do-i-check-for-a-network-connection

    Detecting network connection / disconnection in C#
    http://felizk.dk/?p=43

    Check network connection status using C#.net
    http://riteshk.blogspot.com/2007/02/check-network-connection-status-using.html

    More
    http://www.google.com.tw/search?hl=zh-TW&rlz=1C1CHMI_zh-TWTW344TW344&q=c%23+network+connection&btnG=%E6%90%9C%E5%B0%8B&meta=&aq=f&oq=

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2009年10月8日 上午 03:40
  • 方法很多, 重點就是要找一個(或數個)會在Internet上一直存在, 又會回應你電腦訊息的主機.
    提供一個用DNS類別 來處理的方式
    你可以使用 Dns. GetHostAddresses 方法 或 Dns. GetHostByAddress 方法
    去測試一個(或數個) DNS Server (如Hinet的DNS 或 SeedNet的DNS) 是否會回應訊息.
    當然這種方法不是 100% ,因為Hinet和SeedNet同時掛掉的機會也不是沒有, 所以多偵測幾個不同的點可以降低誤判機率
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    • 已標示為解答 weison 2009年10月9日 下午 02:56
    2009年10月8日 上午 03:49
    版主
  • 比較建議是使用  NetworkChange.NetworkAvailabilityChanged 事件,再去做檢查網路狀態的動作, ex. NetworkInterface.GetIsNetworkAvailable() 

    不然,一直對外向某台伺服器不管是要 PING 或是任何連線要求的檢查,太過頻仍有時候會被 ban 掉...



    chhuang - There's more than one way to do it.
    2009年10月8日 上午 06:09