在Unity中判斷當前網絡連接方式以及連接狀態

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Text;
using System;
using System.Runtime.InteropServices;
using System.Net.NetworkInformation;

/// <summary>
/// 獲取網絡狀態
/// </summary>
public class GetNetWorkStatus : MonoBehaviour {
    private const int INTERNET_CONNECTION_MODEM = 1;        //因特網連接調制解調器
    private const int INTERNET_CONNECTION_LAN = 2;          //因特網連接局域網
    public Text text;                       //用於在界面上顯示網絡連接狀態
    [DllImport("winInet.dll")]
    private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved);

    // Update is called once per frame
    void Update()
    {
        btnJudge_Click();           //實時判斷網絡連接狀態
    }

    /// <summary>
    /// 判斷網絡的連接狀態
    /// </summary>
    /// 網絡狀態(1--》未聯網;2--》採用調制解調器;3--》採用網卡上網)
    /// <returns></returns>
    public static int GetNetConnectedState(string strNetAdderss)
    {
        int iNetStatus = 0;
        System.Int32 dwFlag = new int();
        if(!InternetGetConnectedState(ref dwFlag, 0))
        {
            //沒能連接上網絡
            iNetStatus = 1;
        }
        else if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0)
        {
            //採用調治解調器上網,需要進一步判斷能否登錄具體網站
            if (PingNetAddress(strNetAdderss))
            {
                //可以ping通給定的網址,網絡OK
                iNetStatus = 2;
            }
            else
            {
                //不可以ping通給定的網址,網絡不OK
                iNetStatus = 4;
            }
        }
        else if ((dwFlag & INTERNET_CONNECTION_LAN) != 0)
        {
            //採用網卡上網,需要進一步判斷能否登錄具體網站
            if (PingNetAddress(strNetAdderss))
            {
                //可以ping通給定的網址,網絡OK
                iNetStatus = 3;
            }
            else
            {
                //不可以ping通給定的網址,網絡不OK
                iNetStatus = 5;
            }
        }
        return iNetStatus;
    }

    /// <summary>
    /// ping 具體的網址看能否ping通
    /// </summary>
    /// <param name="strNetAdd"></param>
    /// <returns></returns>
    private static bool PingNetAddress(string strNetAdd)
    {
        bool Flage = false;
        System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
        try
        {
            PingReply pr = ping.Send(strNetAdd, 3000);
            if (pr.Status == IPStatus.TimedOut)
            {
                Flage = false;
            }
            if (pr.Status == IPStatus.Success)
            {
                Flage = true;
            }
            else
            {
                Flage = false;
            }
        }
        catch
        {
            Flage = false;
        }
        return Flage;
    }

    //判斷方法

    //private void btnJudge_Click(object sender, EventArgs e)

    private void btnJudge_Click()
    {
        int iNetStatus = GetNetConnectedState("baidu.com");
        if (iNetStatus == 1)
        {
            text.text = "網絡未連接";
        }
        else if (iNetStatus == 2)
        {
            text.text = "採用調治解調器上網";
        }
        else if (iNetStatus == 3)
        {
            text.text = "採用網卡上網";
        }
        else if (iNetStatus == 4)
        {
            text.text = "採用調治解調器上網,但是聯不通指定網絡";
        }
        else if (iNetStatus == 5)
        {
            text.text = "採用網卡上網,但是聯不通指定網絡";
        }
    }

}






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