unity如何检测是否联网
  aIm4e3TeJr90 2023年11月02日 31 0

有些程序要求必须联网才可以运行。


如何在unity中进行检测当前运行程序的环境是否连接到网络?


新建一个场景,先在log里来显示内容。


将脚本ChinarWeb挂载到相机上。

unity如何检测是否联网_代理服务器

下面是脚本内容:

using UnityEngine;
using System.Net.NetworkInformation;
using System.Runtime.InteropServices;
using Ping = System.Net.NetworkInformation.Ping;


/// <summary>
/// 简化
/// 封装函数 —— 检测本地网络链接状态
/// </summary>
public class ChinarWeb : MonoBehaviour
{
    [DllImport("winInet.dll")]                                                            //引用外部库
    private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved); //库中函数

    public static bool getnetsuccess;//获取网络连接状态

    void Start()
    {
        //放入一个可以访问的网址
        ChinarPing("https://mail.qq.com/cgi-bin/frame_html?sid=k4TYjM0LzgSSLBt5&r=9fef6941cc5387a2183ad813fa36a8ef&lang=zh");
    }


    void Update()
    {
        IsConnectedInternet();
    }


    /// <summary>
    /// 判断本地的连接状态
    /// </summary>
    private static bool IsConnectedInternet()
    {
        int dwFlag = new int();
        if (!InternetGetConnectedState(ref dwFlag, 0))
        {
            PrintR("当前没有联网,请您先联网后再进行操作!");
            if ((dwFlag & 0x14) == 0) return false;
            Debug.LogWarning("本地系统处于脱机模式。");
            return false;
        }
        else
        {
            if ((dwFlag & 0x01) != 0)
            {
                Print("调制解调器上网。");
                return true;
            }
            else if ((dwFlag & 0x02) != 0)
            {
                Print("网卡上网。");
                return true;
            }
            else if ((dwFlag & 0x04) != 0)
            {
                Print("代理服务器上网。");
                return true;
            }
            else if ((dwFlag & 0x40) != 0)
            {
                Print("虽然可以联网,但可能链接也可能不连接。");
                return true;
            }
        }

        return false;
    }


    /// <summary>
    /// Chinar 闪亮输出
    /// </summary>
    public static void Print(string str)
    {
        getnetsuccess = true;
        Debug.Log("可以上网,上网类型输出:" + str);
    }


    /// <summary>
    /// Chinar 警告输出
    /// </summary>
    public static void PrintR(string str)
    {
        getnetsuccess = false;
       Debug.Log("不可上网的警告输出" + str);

       
    }


    /// <summary>
    /// Ping命令检测网络是否畅通
    /// </summary>
    /// <param name="url">URL地址</param>
    /// <returns>是否ping通</returns>
    public static bool ChinarPing(string url)
    {
        bool isSucceed = true;
        Ping ping = new Ping();
        try
        {
            var pingReply = ping.Send(url);
            if (pingReply != null && pingReply.Status != IPStatus.Success)
            {
                isSucceed = false;
            }

            if (pingReply != null) print("Ping 网址:<" + url + ">------状态:" + pingReply.Status);
        }
        catch
        {
            isSucceed = false;
        }

        return isSucceed;
    }
}

运行后,可以通过log来看网络情况:

unity如何检测是否联网_代理服务器_02

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  cnCTZTo8tgOC   2023年11月02日   71   0   0 Systemjavad3
  lh6O4DgR0ZQ8   2023年11月19日   34   0   0 Systemide多态
  kIM7GUNpnV3x   2023年11月02日   62   0   0 数组Systemi++
aIm4e3TeJr90