老规矩,先介绍一下 Unity 的科普小知识:
在做项目时有时候可能需要拿到当前设备的网络状态,所以本文整理了在Unity中可以用到的一些拿到网络状态的方法,下面一起来看看吧。
第一种:使用Unity自己的API判断网络状态
Unity API 如下:https://docs.unity3d.com/ScriptReference/NetworkReachability.ReachableViaLocalAreaNetwork.html
/// <summary>
/// <para>Describes network reachability options.</para>
/// </summary>
public enum NetworkReachability
{
/// <summary>
/// <para>Network is not reachable.</para>
/// </summary>
NotReachable,
/// <summary>
/// <para>Network is reachable via carrier data network.</para>
/// </summary>
ReachableViaCarrierDataNetwork,
/// <summary>
/// <para>Network is reachable via WiFi or cable.</para>
/// </summary>
ReachableViaLocalAreaNetwork
}
使用方法如下:
void Start()
{
// 1
Debug.Log("当前网络状态:"+ Application.internetReachability);
// 2
switch (Application.internetReachability)
{
case NetworkReachability.NotReachable:
Debug.Log("当前网络不可用");
break;
case NetworkReachability.ReachableViaCarrierDataNetwork:
Debug.Log("当前网络为移动网络");
break;
case NetworkReachability.ReachableViaLocalAreaNetwork:
Debug.Log("当前网络为Wifi");
break;
default:
break;
}
// 3
if (Application.internetReachability == NetworkReachability.NotReachable)
{
Debug.Log("当前网络不可用");
}
else if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork)
{
Debug.Log("当前网络为移动网络");
}
else if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork)
{
Debug.Log("当前网络为Wifi");
}
}
优点:方便快捷,使用一行API代码就可以查询此时的网络状态 缺点:项目打包成exe后无法通过该方法判断网络状态
第二种方法:引用外部库wininet
[DllImport("wininet")]
private extern static bool InternetGetConnectedState(ref int connectionDescription, int reservedValue);
public bool IsConnectedInternet()
{
int i = 0;
if (InternetGetConnectedState(ref i, 0))
{
Debug.Log("已联网");
return true;
}
else
{
Debug.Log("未联网");
return false;
}
}
第三种方法:Ping命令检测网络是否畅通
public bool PingIsHaveNet(string url)
{
System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
PingReply ret = ping.Send(url);
try
{
if (ret.Status != IPStatus.Success)
{
Debug.Log("未联网");
return false;
}
else
{
Debug.Log("已联网");
return true;
}
}
catch (Exception e)
{
Debug.Log("Ping URL 失败");
return false;
}
}
第四种方法: 通过 .Net.NetworkInformation 方法检测
需要引用命名空间 using System.Net.NetworkInformation
private bool UrlExistsUsingSockets(string url)
{
if (url.StartsWith("https://")) url = url.Remove(0, "https://".Length);
try
{
System.Net.IPHostEntry ipHost = System.Net.Dns.GetHostEntry(url);// System.Net.Dns.Resolve(url);
Debug.Log("已联网");
return true;
}
catch (System.Net.Sockets.SocketException se)
{
System.Diagnostics.Trace.Write(se.Message);
return false;
}
}
以上就是整理的几种查询当前设备网络状态的几种方法,如果有更好的方法可以评论区留言提出哦~
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有