我正在尝试使用Berkeley套接字API在C语言中创建一个简单的SNTP客户端,但是我无法从响应消息计算调整后的时间。我是从RFC2030获得的。

收到服务器回复后,客户端确定目标
Timestamp变量作为根据其时钟输入的到达时间
NTP时间戳格式。下表总结了这四个
时间戳记。


  • 原始时间戳(T1):客户端
  • 发送的时间请求
  • 接收时间戳(T2):服务器
  • 收到的时间请求
  • 发送时间戳(T3):服务器
  • 发送的时间回复
  • 目标时间戳记(T4):客户端
  • 收到的时间回复


    据我所知,我可以通过计算客户的时间并加上时间偏移量t来计算调整后的当前时间,其中时间偏移量定义为
    t = ((T2 - T1) + (T3 - T4)) / 2
    

    我需要知道T4才能进行此计算,但这不是数据包消息的一部分。我如何获得此时间戳?

    最佳答案

    仅从您发布的这一点开始,我相信您应该能够以与获得T1相同的方式来获得T4(又名,这两者都是根据本地计算机处理请求的特定阶段时的时间)。

    原始时间戳(T1):客户端发送的时间请求
    目标时间戳记(T4):客户端收到的时间回复


    糟糕,我的错误假设。

    在收到响应数据包后立即使用C gettimeofday function这样的东西创建您自己的时间戳是否足够?

    关于c - 确定(S)NTP数据包的目标时间戳?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7674649/

    10-11 23:19
    查看更多