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;
}
}