最近接手的一个客户端项目需偠获取网络时间戳进行超时判断,想到了使用NTP协议来实现
在网上参看了不少博文,大多数人提供的C/C++代码过于杂乱不宜在正式项目中使鼡(拒绝野代码)。
在此我重写了一遍并在 Windows 与 Linux 两大平台上测试通过。
NTP的基本工作原理如图所示(Device A 相当于客户端Device B 相当于 NTP 服务端)。Device A 和 Device B 通过网络相连它们都有自己独立的系统时钟,需要通过NTP实现各自系统时钟的自动同步为便于理解,作如下假设:
获取网络时间戳的工作过程如下:
至此Device A已经拥有足够的信息来计算两个重要的参数:
这样,Device A就能够根据这些信息来设定自己的时钟使之与Device B的时钟同步。
以上内容只是对NTP工作原理的一个粗略描述详细内容请参阅RFC 1305。
NTP有两种不同类型的报文一种是时钟同步报文,另一种是控制報文控制报文仅用于需要网络管理的场合,它对于时钟同步功能来说并不是必需的这里不做介绍。时钟同步报文封装在UDP报文中其格式如图所示。
接口即可详细说明参考如下所列代码:
* @brief 时间描述信息结构体。 * @brief 转换(以 100纳秒 为单位的)时间值(1970年1月1日到现茬的时间)也可通过如下方式转换为 timeval 信息:
HTML5中定义了WebSocket规范该规范使得能够實现在浏览器端和服务器端通过WebSocket协议进行双向通信,运用Java语言和Tomcat的WebSocket实现作为服务端实现一个聊天室的搭建。 运用Java语言和Tomcat的WebSocket实现作为服务端快速实现一个聊天室的搭建。