c# – 检查Unity的互联网连接

我有一个Unity项目,我为 Android和iOS平台构建.我想检查桌面,Android和iOS设备上的互联网连接.我读过三个不同的解决方案:

> Ping一些东西(例如Google) – 我完全不喜欢这样的决定,而且我已经读过关于Android的错误.
> Application.internetReachability – 根据Unity的文档,此功能仅确定我有可能连接到Internet(它不保证真正的连接).
> Network.TestConnection() – 如果我没有Internet连接,我的应用程序将失败.所以这也不正确.

如何确定我是否在Unity内部具有互联网连接?

解决方法

我实际上并不认为Network.TestConnection()是这项工作的正确工具.根据 the documentation,它看起来像是用于测试NAT是否正常工作以及您的客户端是否可通过IP公开访问,但您要检查的是您是否具有一般的互联网连接.

这是用户pixel_fiendsolution that I found on Unity Answers,其仅测试网站以查看用户是否具有连接性.此代码一个好处是它使用IEnumerator进行异步操作,因此连接测试不会占用应用程序的其余部分:

IEnumerator checkInternetConnection(Action<bool> action){
     WWW www = new WWW("http://google.com");
     yield return www;
     if (www.error != null) {
         action (false);
     } else {
         action (true);
     }
 } 
 void Start(){
     StartCoroutine(checkInternetConnection((isConnected)=>{
         // handle connection status here
     }));
 }

您可以将网站更改为您想要的任何内容,甚至可以修改代码以在多个站点中的任何一个可访问时返回成功. AFAIK无法在不尝试连接到互联网上的特定网站的情况下检查真正的互联网连接,因此“ping”这样的一个或多个网站可能是您确定连接时的最佳选择.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...