当前位置: 首页 > wzjs >正文

阿里巴巴吧网站怎么做河北搜索引擎优化

阿里巴巴吧网站怎么做,河北搜索引擎优化,建设网站是什么,世界大学排名C#通过NTP服务器获取NTP时间 注意事项: 如果NTP服务器地址是域名,如阿里云的NTP服务器地址。需要DNS解析。NTP使用UDP通讯,默认端口是123NTP经过很多年的发展,有4个版本号,目前常用的3和4。NTP区分客户端和服务端&am…

C#通过NTP服务器获取NTP时间

注意事项:

  1. 如果NTP服务器地址是域名,如阿里云的NTP服务器地址。需要DNS解析。
  2. NTP使用UDP通讯,默认端口是123
  3. NTP经过很多年的发展,有4个版本号,目前常用的3和4。NTP区分客户端和服务端,客户端角色标志为3。
  4. NTP发送的时间戳是第41到48个字节。获取到的字节需要转为大端序列。
  5. NTP标准协议返回的时间是自1900.1.1 00:00:00开始的毫秒时间数值,需要字节转换为你需要的日期时间。

以下是通过NTP服务器获取NTP时间的代码:

/// <summary>
/// 获取NTP时间
/// </summary>
/// <param name="serverList"></param>
/// <param name="timeoutMilliseconds"></param>
/// <param name="isToLocal"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public static async Task<DateTime> GetNtpTime(List<string> serverList, bool isToLocal = false, int timeoutMilliseconds = 2000)
{List<string> realServerList = new List<string>();bool needUseLastIp = false;if (serverList is null || !serverList.Any()){serverList = NtpServers;needUseLastIp = true;if (!string.IsNullOrEmpty(lastIpAddress)){realServerList.Add(lastIpAddress);if (serverList.Contains(lastIpAddress)){serverList.Remove(lastIpAddress);}}}realServerList.AddRange(serverList);Log.Information($"GetNtpTime realServerList: {JsonConvert.SerializeObject(realServerList)}");foreach (var server in realServerList){try{IPAddress? ipAddress;List<IPAddress> addressList = new List<IPAddress>();if (!IPAddress.TryParse(server, out ipAddress)){// 如果不是IP地址,则尝试DNS解析try{var hostEntry = await Dns.GetHostEntryAsync(server);addressList = hostEntry.AddressList.ToList();}catch (Exception e){Log.Error($"DNS resolution failed: {e.Message} {e.StackTrace}");}}else{addressList.Add(ipAddress);}if (addressList is null || !addressList.Any()){continue;}foreach (var address in addressList){using (var client = new UdpClient()){client.Client.ReceiveTimeout = timeoutMilliseconds;client.Client.SendTimeout = timeoutMilliseconds;// 发送NTP请求var request = new byte[48];request[0] = 0x1B; // 设置版本号4,模式3(客户端)var endPoint = new IPEndPoint(address, 123);client.Send(request, request.Length, endPoint);// 发送请求并接收响应var response = await client.ReceiveAsync();// 验证响应数据长度if (response.Buffer.Length < 48 || !IsValidNtpResponse(response.Buffer))continue;// 解析时间戳(注意:BitConverter默认是小端,需要反转)ulong intPart = BitConverter.ToUInt32(response.Buffer, 40);ulong fractPart = BitConverter.ToUInt32(response.Buffer, 44);// 转换为大端序(NTP使用大端)intPart = SwapEndianness((uint)intPart);fractPart = SwapEndianness((uint)fractPart);// 计算总时间戳ulong ntpTimestamp = (intPart << 32) | (fractPart & 0xFFFFFFFF);double totalSeconds = (double)ntpTimestamp / (double)(1UL << 32);if (needUseLastIp){lastIpAddress = endPoint.Address.ToString();Log.Information($"记录本次获取NTP时间的IP为:{lastIpAddress}");}// 转换为DateTimeDateTime epoch = new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc);DateTime ntpTime = epoch.AddSeconds(totalSeconds);if (isToLocal){ntpTime = ntpTime.ToLocalTime();}return ntpTime;}}}catch (Exception ex){Log.Error($"连接服务器 {server} 失败: {ex.Message} {ex.StackTrace}");continue;}}throw new Exception("所有NTP服务器均无法连接!");
}

获取到的时间,如果需要自己进行时区转换,可以通过C#代码从电脑本机获取到标准的时区列表,然后将获取到的NTP时间加上时区的BaseUtcOffset,即可转换到所需要的时区时间。
C#获取时区列表代码如下

var allZones = TimeZoneInfo.GetSystemTimeZones().ToList();
http://www.dtcms.com/wzjs/300862.html

相关文章:

  • 网站建设行业分析2023b站免费推广入口
  • 东莞代理记账seo宣传
  • 佛山建设外贸网站佛山关键词排名效果
  • 做网站文章要一篇一篇的写吗seo搜索引擎优化软件
  • 哪里的佛山网站建设谷歌 google
  • 邯郸网站建设纵横seo网站推广技术
  • 做书一般在哪个网站下载素材上海关键词优化方法
  • 广西建网站公司3a汽车集团公司网络营销方案
  • 什么网站空间稳定指数运算公式大全
  • 深圳横岗疫情自然搜索优化
  • 做企业网站用drupal7bt磁力搜索神器
  • 东莞十大公司排名百度seo排名主要看啥
  • 衡水移动网站建设价格优化营商环境条例心得体会
  • 乌鲁木齐网站外包百度seo怎么关闭
  • 湖寮做网站淘宝店铺推广方式有哪些
  • 网站建设i如何用google搜索产品关键词
  • 网站由什么组成百度统计平台
  • 有后台的网站模版seo推广策划
  • 免费软件站kj6699的seo综合查询
  • 柬埔寨做赌博网站免费网络推广网址
  • 创建公司网站需要准备哪些素材百度搜索官方网站
  • busy bee wordpress优化设计六年级下册数学答案
  • 别人用我公司营业执照备案做网站成都网站建设系统
  • 动易做网站石家庄热搜
  • 平台网站功能刚刚中国宣布重大消息
  • 网站建设 源码准备中层管理者培训课程有哪些
  • 怎样用手机做网站专业培训心得体会
  • 动态网站建设实训参考文献网站建设杭州
  • 网上停车场做施工图人员网站全网营销推广软件
  • 东莞企创做网站怎么样微博热搜榜排名今日