美文网首页
Unity Ping IPV6

Unity Ping IPV6

作者: 寒晟0 | 来源:发表于2018-12-07 13:49 被阅读0次

unity的System.Net.NetworkInformation.Ping不能正常使用调用sendaysnc直接卡死主线程 timeout时间后回调PingCompletedEventArgs e.Reply = null所以只好使用Unity自带ping 自带的ping测试ip v6不能直接传ipv6地址 要通过dns路由获取host对应的地址

public class NetUtil
    {
        /// <summary>
        /// host to ip
        /// </summary>
        /// <returns></returns>
        public static string ResolveHostNameToIP(string host, out AddressFamily af)
        {
            af = AddressFamily.Unknown;
            IPAddress[] AddressList = null;
            try
            {
                AddressList = Dns.GetHostAddresses(host);
            }
            catch (SocketException)
            {
                AddressList = new IPAddress[] { };
            }
            foreach (var ip in AddressList)
            {
                af = ip.AddressFamily;
                //IPv4
                if (ip.AddressFamily == AddressFamily.InterNetwork)
                {
                    byte[] ipb = ip.GetAddressBytes();
                    StringBuilder sb = new StringBuilder();
                    foreach (var b in ipb)
                    {
                        if (sb.Length > 0)
                        {
                            sb.Append(".");
                        }
                        sb.Append(b);
                    }
                    return sb.ToString();
                }
                //IPv6
                if (ip.AddressFamily == AddressFamily.InterNetworkV6)
                {
                    byte[] ipb = ip.GetAddressBytes();
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < ipb.Length; ++i)
                    {
                        if (i % 2 == 0)
                        {
                            if (sb.Length > 0)
                            {
                                sb.Append(":");
                            }
                        }
                        sb.Append(ipb[i].ToString("x2"));
                    }
                    return sb.ToString();
                }
            }
            af = AddressFamily.Unknown;
            return string.Empty;
        }
    }
public class UnityPing
    {
        private Ping _ping;
        public UnityPing(string host, float timeout, Action<float> callback)
        {
            AddressFamily af = AddressFamily.Unknown;
            var ip = NetUtil.ResolveHostNameToIP(host, out af);
            _ping = new Ping(ip);
            AppFacade.Instance.GetBaseManager<BaseManger>(ManagerName.BaseManger)
                .StartCoroutine(PingTimeOut(Time.unscaledTime, timeout, callback));
        }
        private IEnumerator PingTimeOut(float unscaledTime, float timeout, Action<float> callback)
        {
            while (true)
            {
                if (null == _ping)
                {
                    yield break;
                }
                if (!_ping.isDone)
                {
                    yield return Wait.ForEndOfFrame;
                }
                break;
            }
            callback(Time.unscaledTime - unscaledTime);
        }
        public void DestroyPing()
        {
            if (null != _ping)
            {
                _ping.DestroyPing();
                _ping = null;
            }
        }
    }

相关文章

  • ping

    Centos 下ping ipv6 地址: windows下 ping ipv6 地址:

  • Unity Ping IPV6

    unity的System.Net.NetworkInformation.Ping不能正常使用调用sendaysnc...

  • IPv6

    验证 PC1 ping PC2 IPv6 ping: ping ipv6 3000::1 查看接口IPv6...

  • ping IPV6地址

    现在ipv6使用越来越多了,那怎么ping ipv6的地址呢 win中 win中可以在cmd窗口中使用ping -...

  • 解决使用ping6 报 connect: Invalid arg

    使用ping6 或者 ping -6 直接 ping ipv6时报错。 这是因为服务器,启用了多网卡,因此要指定网...

  • 2020-09-03 Unity Apple登录

    https://connect.unity.com/p/dui-ping-guo-zhang-hao-deng-l...

  • ping与ping6

    最近在做一个ping的功能,用python实现,要分别实现ipv4和ipv6两种栈。虽然也是用开源的ping包,并...

  • Unity IPv6 Socket 支持

    Unity IPv6 几点注意事项: 1.unity版本: 4.7.2f1(此为我用的版本) 2.服务器IP地址 ...

  • Android 指定网络接口收发 Socket 数据

    上次写了一篇 Android Ping IPv6 地址的教程,这个工作的目的就是想通过 Volte 网络发送 SI...

  • 传输层协议:TCP和UDP

    传输层:TCP和UDP 使用IPv4和IPv6的应用程序 平时我们使用的tcpdump、ping、tracerou...

网友评论

      本文标题:Unity Ping IPV6

      本文链接:https://www.haomeiwen.com/subject/lljthqtx.html