完整源码,附工程下载,工程其实也就下面两个代码。
想在不能上网的服务器局域网中部署一个时间服务NTP,当然系统自带该服务,可以开启,本文只是分享一下该协议报文和能跑的源码。网上作为服务的源码不太常见,能见到不一定能跑起来,缺胳膊少脚的,分享代码一定要分享全。
先来效果图:
开启程序后,让win系统来同步本机时间效果如下:
用通用客户端GuerrillaNtp来读,也没有问题:
添加图片注释,不超过 140 字(可选)
Fuck Shut Up,Show me the code
源码如下:
运行入口:
namespace NTP
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, NTP(SNTP)!");
Console.WriteLine("本程序占用 UDP 123 端口,如遇冲突,请关闭系统自带时间服务 W32Time(Windows Time)");
new SNTPServer().Start();
Console.ReadLine();
}
}
}
主程序代码:
using System.Net.Sockets;
using System.Net;
using System.Buffers.Binary;
namespace NTP
{
/// <summary>
/// 简单网络时间协议服务器
/// </summary>
public class SNTPServer
{
int port = 123; //服务端口,NTP默认端口123
bool stopFlag = false; //通知后台线程停止消息循环的标识
Thread tdServer; //服务器后台监听线程
/// <summary>
/// 初始化一个简单网络时间协议服务器
/// </summary>
public SNTPServer()
: this(123) {
}
/// <summary>
/// 使用指定参数初始化一个简单网络时间协议服务器
/// </summary>
/// <param name="port">服务端口</param>
public SNTPServer(int port)
{
this.port = port;
}
/// <summary>
/// 获取和设置服务端口号
/// </summary>
public int Port
{
get {
return this.port; }
set {
this.port = value; }
}
/// <summary>
/// 启动服务器