Unity判断PC本地的网络连接状态、获取网络时间

Unity判断PC本地的网络连接状态

[DllImport("winInet.dll")]//引用外部库
private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved);//库中函数

/// <summary>
    /// 判断连接状态
    /// </summary>
    public static bool IsConnected()
    {
        int dwFlag = new int();
        if (!InternetGetConnectedState(ref dwFlag, 0))
        {
            print("没有联网");
            if ((dwFlag & 0x14) == 0) return false;
            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;
    }

Ping命令检测网络是否畅通

public static bool PingURL(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:" + url + "--State:" + pingReply.Status);
        }
        catch
        {
            isSucceed = false;
        }

        return isSucceed;
    }

Unity获取网络时间

public DateTime GetNetworkTime()
    {
        try
        {
            //ntp服务器地址
            string server = "ntp7.aliyun.com";

            var ntpData = new byte[48];
            ntpData[0] = 0x1B;
            //网络链接
            var addresses = Dns.GetHostEntry(server).AddressList;
            var ipEndPoint = new IPEndPoint(addresses[0], 123); // https port : 443
            var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            socket.ReceiveTimeout = 5000;
            socket.Connect(ipEndPoint);
            socket.Send(ntpData);
            socket.Receive(ntpData);
            socket.Close();

            ulong intPart = (ulong)ntpData[40] << 24 | (ulong)ntpData[41] << 16 | (ulong)ntpData[42] << 8 | (ulong)ntpData[43];
            ulong fractPart = (ulong)ntpData[44] << 24 | (ulong)ntpData[45] << 16 | (ulong)ntpData[46] << 8 | (ulong)ntpData[47];

            var milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);
            var networkDataTime = (new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Local)).AddMilliseconds((long)milliseconds);

            TimeZone localzone = TimeZone.CurrentTimeZone;
            TimeSpan currentOffset = localzone.GetUtcOffset(networkDataTime);
            DateTime initTime = networkDataTime + currentOffset;
            return initTime;
        }
        catch (Exception)
        {
            throw;
        }
    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值