目前我有一个 C# 程序来查询我的 NTP 服务器 (CentOS 7)
public static DateTime GetNetworkTime()
{
const string ntpServer = "192.168.10.48";
var ntpData = new byte[48];
ntpData[0] = 0x1B; //LeapIndicator = 0 (no warning), VersionNum = 3 (IPv4 only), Mode = 3 (Client Mode)
var addresses = Dns.GetHostEntry(ntpServer).AddressList;
var ipEndPoint = new IPEndPoint(addresses[0], 123);
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
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 networkDateTime = (new DateTime(1900, 1, 1)).AddMilliseconds((long)milliseconds);
return networkDateTime;
}
这是有效的,然后一段时间后它会返回一个错误:
由于连接方在一段时间后没有正确响应而导致连接尝试失败,或者由于连接的主机未能响应而建立的连接失败
它可以在另一台电脑上继续工作。我认为ntpd
有一个内置防火墙正在阻止套接字连接。我的firewalld 处于离线状态。另外,将 ntp 服务器更改为 likeasia.pool.ntp.org
似乎可行。
我目前还删除了所有限制。有什么办法可以找到这个原因吗?