自制SNTP服务器

其实主要目的呢,是为了玩玩Boost.asio函数库。
最近在看Windows并发编程指南,说到IO完成端口、线程池什么的。然后我想到Boost.asio说内部实现用的是IO完成端口,并且它也可以搞多线程,于是决定试试看。

因为SNTP协议是相对比较简单的嘛,所以就用它来做实验。按照RFC1361写了个简单的服务器,经过测试确实Windows和Linux下都能编译都能运行。目前只开了一个线程给它跑,不过个人感觉效率很好速度很快。

然后其实本来是打算给Windows那个Internet时间同步用的,但是搞到最后Windows也不认它,总是同步失败。 我都用NTPTOOL工具去测服务器了,发现很正常啊,不知道Windows是不是用了自己的NTP协议还是怎么的。总之最后我又给写了个Windows用的NTP客户端。

服务器启动的时候会先到一台NTP服务器上去获取时间,计算和当前机器上的时间的差,然后以后向客户端提供时间的时候都会用这个差作为偏移去校正。之所以这么做,是因为OpenVZ虚拟化环境下的我那台VPS不让改系统时间(汗)

这个步骤暂时没提供任何设置,要去掉只能改代码。本来就是实验嘛所以也不会关注那么多。

服务器和客户端的代码都在这个压缩包里(同一个文件里),有兴趣的欢迎交流w 还有一些出错的时候是没有输出提示的,原因:懒(殴

sorasntp

发表评论