Ping 什么意思???

【来自百度百科的诠释:】 Ping是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。应用格式:ping空格IP地址。该命令还可以加许多参数使用,具体是键入ping按回车即可看到详细说明。

Unity Ping:

ping操作是异步的,可以使用ping.isDone对ping对象进行状态轮询。当收到答复时,它在ping.time。 注意:在WindowsStore应用程序上,流套接字用于模拟ping功能,它将尝试打开与端口80的指定IP地址的连接。此外,您还需要在Package.appx清单中启用InternetClient功能。

官方文档:https://docs.unity3d.com/2017.2/Documentation/ScriptReference/Ping.html


文档上,只体现了三个属性和一个方法,,,程序集源码如下:

#region 程序集 UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
// E:\program files\Unity\Editor\Data\Managed\UnityEngine.dll
#endregionusing UnityEngine.Scripting;namespace UnityEngine
{//// 摘要://     Ping any given IP address (given in dot notation).//Ping任何给定的IP地址(用点符号表示)。public sealed class Ping{//// 摘要://     Perform a ping to the supplied target IP address.//     对提供的目标IP地址执行ping。// 参数://   address: ip地址[GeneratedByOldBindingsGeneratorAttribute]public Ping(string address);~Ping();//// 摘要://     Has the ping function completed?//     ping功能完成了吗?public bool isDone { get; }//// 摘要://     This property contains the ping time result after isDone returns true.//     此属性包含isDone返回true后的ping时间结果。public int time { get; }//// 摘要://     The IP target of the ping.//     ping的IP目标。public string ip { get; }[GeneratedByOldBindingsGeneratorAttribute][ThreadAndSerializationSafeAttribute]public void DestroyPing();}
}

尝试写了一下,发现并不好用,代码如下:【期待大佬留言纠错,指点】

using System.Collections;
using System.Collections.Generic;
using System.Reflection.Emit;
using UnityEngine;public class UnityPing : MonoBehaviour
{void Start(){StartCoroutine(CheckPing());}IEnumerator CheckPing(){//Ping服务器 Ping ping = new Ping("服务器IP");int time = 0;Debug.Log("开始尝试连接... : " + ping.isDone);while (!ping.isDone){yield return new WaitForSeconds(0.1f);if (nTime > 20) //2秒{Debug.Log("连接失败 ... " + ping.time);yield break;}time ++;}if (ping.isDone){yield return ping.time;Debug.Log("连接成功... 就没成功过");}}}


文末分享一个Unity ping一个服务器 ip 的工具类 ,原文链接:https://gameinstitute.qq.com/community/detail/126598

ps:原文的大括号是中文字符,如有使用建议直接复制下文代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class UnityPing : MonoBehaviour
{private static string s_ip = "";private static System.Action<int> s_callback = null;private static UnityPing s_unityPing = null;private static int s_timeout = 2;public static void CreatePing(string ip, System.Action<int> callback){if (string.IsNullOrEmpty(ip)) return;if (callback == null) return;if (s_unityPing != null) return;s_ip = ip;s_callback = callback;GameObject go = new GameObject("UnityPing");DontDestroyOnLoad(go);s_unityPing = go.AddComponent<UnityPing>();}/// <summary>/// 超时时间(单位秒)/// </summary>public static int Timeout{set{if (value > 0){s_timeout = value;}}get { return s_timeout; }}private void Start(){switch (Application.internetReachability){case NetworkReachability.ReachableViaCarrierDataNetwork: // 3G/4Gcase NetworkReachability.ReachableViaLocalAreaNetwork: // WIFI{StopCoroutine(this.PingConnect());StartCoroutine(this.PingConnect());}break;case NetworkReachability.NotReachable: // 网络不可用default:{if (s_callback != null){s_callback(-1);Destroy(this.gameObject);}}break;}}private void OnDestroy(){s_ip = "";s_timeout = 20;s_callback = null;if (s_unityPing != null){s_unityPing = null;}}IEnumerator PingConnect(){// Ping网站Ping ping = new Ping(s_ip);int addTime = 0;int requestCount = s_timeout * 10; // 0.1秒 请求 1 次,所以请求次数是 n秒 x 10// 等待请求返回while (!ping.isDone){yield return new WaitForSeconds(0.1f);// 链接失败if (addTime > requestCount){addTime = 0;if (s_callback != null){s_callback(ping.time);Destroy(this.gameObject);}yield break;}addTime++;}// 链接成功if (ping.isDone){if (s_callback != null){s_callback(ping.time);Destroy(this.gameObject);}yield return null;}}
}

Unity 之 Ping类简析尝试使用相关推荐

  1. Unity 之 Application类简析

    Application 应用程序 命名空间: UnityEngine 描述访问应用程序的运行时数据. 这个类包含查找信息和控制运行时数据的静态方法. 静态变量 Static Variables 静态变 ...

  2. GreenDao自带异步操作类简析

    AsyncSession: GreenDao提供一个异步操作的统一接口类AsyncSession,它提供了你所需要的所有异步操作方法. 你可以通过调用DaoSession#startAsyncSess ...

  3. Unity资源加载简析(一)Resources

    一.Resources(此类允许按照路径名来查找并加载物体) 1.Resources.Load加载 加载储存在Resources文件夹中path处的资源(Resouces文件夹可以在Assets文件夹 ...

  4. Unity 之 UGUI Dropdown组件使用简析

    Unity 之 UGUI Dropdown组件使用简析 官方释义 示例展示 代码操作 官方源码 官方释义 官方文档:https://docs.unity3d.com/Manual/script-Dro ...

  5. java jdbc 教程_java JDBC系列教程之JDBC类的简析与JDBC的基础操作

    什么是JDBC? 概念:JAVA Database Connectivity Javas数据库连接,Java语言操作数据库接口,然后由各个数据库厂商去实现这个接口,提供数据库驱动java包,我们可以使 ...

  6. 24考研——专业院校选报指南(3步决定专业选择、11大类本科对应考研专业简析、6步决定目标院校)

    文章目录 一.专业选择指导 1.1 考研整体形势 1.2 考研专业选报 1.2.1 专业设置 1.2.2 专硕专业设置 1.2.3 专业代码含义 1.2.4 区分"学硕和专硕" 1 ...

  7. Learning with Noisy Correspondence for Cross-modal Matching 文献翻译 代码简析

    Learning with Noisy Correspondence for Cross-modal Matching 基于噪声对应的跨模态匹配学习 Learning with Noisy Corre ...

  8. Unity3d资源反编译. AssetBundle格式简析+简单应用+爬坑

    ===================  Unity3d资源反编译工具 DisUnity ================ 源码:https://github.com/ata4/disunity 需要 ...

  9. 【AV1 编码器研究一】aomenc.exe命令行参数简析

    [AV1 编码器研究一]aomenc.exe命令行参数简析 用编码器打印help信息 命令行参数归类 命令行详细内容 通用命令 全局编码选项 码率控制选项 Twopass码率控制选项 关键帧设置选项 ...

最新文章

  1. Linux 命令 top 学习总结
  2. Android TabWidget
  3. 消息称微软计划收购GitHub,估值超50亿美元
  4. c++迭代器的一个例子
  5. 【BZOJ3589】动态树
  6. oracle19c监听服务启动失败,Oracle19c安装(有失败成功记录)
  7. iOS优化内存,提升性能 之五
  8. unity 加载关卡_Unity手游实战:从0开始SLG——本地化篇(四)提取本地化元素
  9. 别再找Axure XX版,这款原型工具永久免费!
  10. 华为网络技术大赛模拟题目
  11. linux 小度 驱动_糯米WiFi安装Linux驱动 (同时支持百度WiFi、小米WiFi、腾讯全民WiFi、360WiFi)...
  12. linux安装ADS软件,Ubuntu 10.10下安装ADS 2009 Update1
  13. rovio视觉里程计的笔记
  14. 解决:tomcat部署遇到问题:One or more Filters failed to start. Full details will be found in the appro
  15. Python中面向对象(类,对象,魔法,打印)
  16. SLAM基础——李群李代数
  17. 【Redis消息队列实现异步秒杀】--Redis学习笔记08
  18. HTML动画部分——项目西游记动画
  19. 竞争学习神经网络详解
  20. IAR安装与破解WIN7版本

热门文章

  1. JavaScript 数组array 插入[ push() ] 与 删除[ splice() ]
  2. xamarin学习笔记A19(安卓AIDL)
  3. 新手必看的模具设计十大分模法,干货满满!!!
  4. 二、HTML5 + CSS3 学习笔记
  5. OLED的中英文和图片显示
  6. 解决数据库高并发的常见方案
  7. buntu22.04安装WPS中文版(一百一十八)
  8. [SSD核心技术:FTL 15] 固态存储FTL映射表的神秘面纱
  9. cv::fitLine用法
  10. 【安全知识分享】道路运输机动车驾驶员安全培训(71页)(附下载)