unity 网络检测

当需要进行网络请求之前,最好做一下网络检测,如果请求超时,可能会导致程序崩溃,下面介绍3种常见的方法

1. 移动端的检测网络(用于Android和iOS)

switch (Application.internetReachability)
        {
            case NetworkReachability.NotReachable:
                //网络断开
                test1.text = "没网";
                break;
            case NetworkReachability.ReachableViaLocalAreaNetwork:
                //WIFI
                test1.text = "wifi";
                break;
            case NetworkReachability.ReachableViaCarrierDataNetwork:
                //4G/3G
                test1.text = "3g/4g";
                break;
        }

2.用于PC端的网络检测(由于第一种方法在Windows和Mac上都只能检测当前的网络环境,不能检测到是否真的有网络上的交互,eg:在Windows无论有没有网都是检测到WiFi连接),有两种用于PC端检测的方式:WWW,Ping

  • WWW:在进行Post或Get请求的时候可以通过检测www.error来确定是否有连接服务器,但是这个方法的返回滞后时间太长(有可能5秒,有可能10秒)
private IEnumerator postData() {

        WWWForm wform = new WWWForm();
        WWW www = new WWW(url);
        yield return www;
        if(www.error)//这里就可以用来做检测,客户端和服务器是否有连接
        {
             Dosth;
        }

    }

3. Ping方法,就是去ping服务器(必须使用协程)

IEnumerator Pingip()
    {
        string ip = "...";//服务器的ip地址
        float pingTime = 0;
        Ping ping = new Ping(ip);
        while (!ping.isDone)
        {
            yield return new WaitForSeconds(0.1f);//0.1秒检测一次
            if (pingTime > 3.0)//如果大于3秒还没有ping成功,默认网络不可用
            {
                Debug.Log("ping失败");
                break;
            }
            pingTime+=0.1f;
        }
        if (ping.isDone)
        {
            Debug.Log("ping成功");
        }
    }

猜你喜欢

转载自blog.csdn.net/star__119/article/details/79544456