C#檢查網絡是否連通

有些時候我們做開發需要判斷網絡是否連通

在網上找了很多種方式

自己總結了一下,把最簡單最有效方式記錄一下

以便以後用到的時候不用那麼麻煩的又去一個一個的試

檢查是否連通Internet網絡

要導入庫wininet.dll

[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState(int Description, int ReservedValue);

 

檢查是否連通局域網服務器

這裏通過執行ping命令,發送數據包判斷是否連通

進過我的測試,ping命令還是一個可行的方法

網上有一些離譜的,用socket,雖然還是可以判斷,但是侷限在於要寫一個服務端程序

誰沒事去寫一個測試網絡是否連通的服務端程序呢

下面是我寫的代碼,複製粘貼就可以用了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.NetworkInformation;
using System.Runtime.InteropServices;

namespace 檢查網絡是否連通
{
    class Program
    {
        static void Main(string[] args)
        {
            bool isConnectInternet = InternetGetConnectedState(0, 0);
            if (isConnectInternet)
            {
                Console.WriteLine("已連通Internet網絡");
            }
            else {
                Console.WriteLine("沒有連通Internet網絡");
            }
            bool b = PingIpOrDomainName("192.168.0.11");
            if (b)
            {
                Console.WriteLine("已連通局域網絡");
            }
            else
            {
                Console.WriteLine("沒有連通局域網絡");
            }
        }
        [DllImport("wininet.dll")]
        private extern static bool InternetGetConnectedState(int Description, int ReservedValue);

        /// <summary>
        /// 檢查網絡是否鏈接
        /// </summary>
        /// <returns></returns>
        public static bool IsConnectInternet()
        {
            return InternetGetConnectedState(0, 0);

        }
        /// <summary>
        /// 是否連接到服務器,true表示連接成功成功,false表示連接失敗
        /// </summary>
        /// <param name="strIpOrDName">輸入參數,表示IP地址或域名</param>
        /// <returns></returns>
        public static bool PingIpOrDomainName(string strIpOrDName)
        {
            try
            {
                Ping objPingSender = new Ping();
                PingOptions objPinOptions = new PingOptions();
                objPinOptions.DontFragment = true;
                string data = "";
                byte[] buffer = Encoding.UTF8.GetBytes(data);
                int intTimeout = 120;
                PingReply objPinReply = objPingSender.Send(strIpOrDName, intTimeout, buffer, objPinOptions);
                string strInfo = objPinReply.Status.ToString();
               // Console.WriteLine(strInfo);
                if (strInfo == "Success")
                {
                   
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception)
            {
                return false;
            }
        }
    }
}

完。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章