获取网络标准时间

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            try
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                LogHelper.GetInstance().RunMonitor();
                if (GetInternetTime("time.nist.gov", out DateTime dt, out string errMsg))
                {
                    if (dt < DateTime.Parse("2024-12-30") /*DateTime.MaxValue*/)
                    {
                        Application.Run(new FormSoftwareAuthorization());
                    }
                    else
                    {
                        MessageBox.Show("授权软件已过期!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                else
                {
                    MessageBox.Show("请链接互联网进行授权操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch
            {
                System.Environment.Exit(0);
            }
        }
        public static bool GetInternetTime(string url, out DateTime dt, out string errMsg)
        {
            dt = DateTime.MinValue;
            var startDt = DateTime.Now;
            var port = 13;
            var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) { ReceiveTimeout = 2000 };
            try
            {
                LogHelper.Error($"IPv4 支持是否可用并且已启用:{Socket.OSSupportsIPv4}");
                LogHelper.Error($"IPv6 支持是否可用并且已启用:{Socket.OSSupportsIPv6}");

                var iphostinfo = Dns.GetHostEntry(url);
                LogHelper.Error(iphostinfo.HostName);
                foreach (var ipinfo in iphostinfo.Aliases)
                {
                    LogHelper.Error($"获取或设置与主机关联的别名列表:{ipinfo}");
                }

                foreach (var item in iphostinfo.AddressList)
                {
                    LogHelper.Error($"获取或设置与主机关联的 IP 地址列表:{item.ToString()} ipv6地址:{item.IsIPv6Teredo} {item.IsIPv6SiteLocal} {item.IsIPv6LinkLocal} ");
                }
                var ip = iphostinfo.AddressList[0];
                if (ip.ToString().Contains(':'))
                {
                    socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp) { ReceiveTimeout = 2000 };
                }
                var ipe = new IPEndPoint(ip, port);

                LogHelper.Error($"软件连接IP:{ip.ToString()}");
                var iar = socket.BeginConnect(ipe, null, null);
                if (!iar.AsyncWaitHandle.WaitOne(5000))
                {
                    LogHelper.Error($"软件连接IP连接超时:{ip.ToString()}");
                    errMsg = "连接超时" + url;
                    return false;
                }
                var recvBuffer = new byte[1024];
                var sb = new StringBuilder();
                var myE = Encoding.UTF8;

                int nBytes;
                while ((nBytes = socket.Receive(recvBuffer, 0, 1024, SocketFlags.None)) > 0)
                {
                    sb.Append(myE.GetString(recvBuffer, 0, nBytes));
                }
                var o = sb.ToString().Split(' ');
                TimeSpan ts = DateTime.Now - startDt;
                var setDt = Convert.ToDateTime(o[1] + " " + o[2]).Subtract(-ts); // 减去中途消耗的时间
                dt = setDt.ToLocalTime();
                errMsg = "";
                return true;
            }
            catch (Exception ex)
            {
                LogHelper.Error($"软件连接互联网出错:{ex.ToString()}");
                errMsg = ex.Message;
                return false;
            }
            finally
            {
                socket.Close();
            }
        }

    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值