用C#(.NET8)开发一个NTP(SNTP)服务

完整源码,附工程下载,工程其实也就下面两个代码。
想在不能上网的服务器局域网中部署一个时间服务NTP,当然系统自带该服务,可以开启,本文只是分享一下该协议报文和能跑的源码。网上作为服务的源码不太常见,能见到不一定能跑起来,缺胳膊少脚的,分享代码一定要分享全。
先来效果图:
开启程序后,让win系统来同步本机时间效果如下:

添加图片注释,不超过 140 字(可选)

用通用客户端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>
		/// 启动服务器
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值