14 个版本

新版本 0.3.9 2024 年 8 月 22 日
0.3.7 2024 年 1 月 7 日
0.3.6 2023 年 6 月 11 日
0.3.2 2022 年 11 月 9 日
0.1.1 2019 年 2 月 15 日

#29 in 日期和时间

Download history 1429/week @ 2024-05-02 1571/week @ 2024-05-09 1744/week @ 2024-05-16 1255/week @ 2024-05-23 1255/week @ 2024-05-30 1459/week @ 2024-06-06 1727/week @ 2024-06-13 1812/week @ 2024-06-20 1873/week @ 2024-06-27 1871/week @ 2024-07-04 1536/week @ 2024-07-11 1621/week @ 2024-07-18 1908/week @ 2024-07-25 1564/week @ 2024-08-01 1731/week @ 2024-08-08 1781/week @ 2024-08-15

7,325 每月下载量
用于 4 crates

BSD-3-Clause

64KB
1K SLoC

sntpc test

简单的 Rust SNTP 客户端


此 crate 提供了一种向 NTP 服务器发送请求并处理响应的方法,提取接收到的时间戳。

支持的 SNTP 协议版本

文档


https://docs.rs/sntpc

安装


此 crate 与 Cargo 兼容,位于 crates.io。将其添加到您的 Cargo.toml,如下所示

[dependencies]
sntpc = "0.3.9"

通过调用 get_time() 方法并提供适当的 NTP 池或服务器,您应该会获得一个有效的时间同步时间戳

use std::net::UdpSocket;
use std::time::Duration;

fn main() {
    let socket =
        UdpSocket::bind("0.0.0.0:0").expect("Unable to create UDP socket");
    socket
       .set_read_timeout(Some(Duration::from_secs(2)))
       .expect("Unable to set UDP socket read timeout");
    let result =
        sntpc::simple_get_time("time.google.com:123", socket);

    match result {
       Ok(time) => {
           let microseconds = sntpc::fraction_to_microseconds(time.sec_fraction());
           println!("Got time: {}.{}", time.sec(), microseconds);
       }
       Err(err) => println!("Err: {:?}", err),
    }
 }

no_std 支持


目前,有基本的 no_std 支持,归功于 no-std-net crate。有一个如何使用 smoltcp 堆栈的例子,这应该会提供一个关于如何为 sntpc 库的使用引导 no_std 网络和时间戳工具的总体思路。

async 支持


功能 async_tokio 允许您将 crate 与 tokio 一起使用。有一个示例: examples/tokio.rs

还有带有功能 asyncno_std 支持,但它需要 Rust >= 1.75-nightly 版本。示例可以在 单独的存储库 中找到。

示例


您可以在 examples/ 文件夹下找到几个示例,展示了如何详细使用此库。目前,有示例显示

  • std 环境中使用 SNTP 库
  • 使用与 smoltcp TCP/IP 堆栈的 SNTP 库。由于 smoltcp 可用接口,需要仅使用一些 std 依赖项

贡献


贡献总是受欢迎的!如果你有一个想法,最好在着手之前向我提出,以确保不会浪费任何努力。如果已经有了相关的开放问题,请继续努力。有关更多详细信息,请参阅 贡献部分

感谢

  1. Frank A. Stevenson:实现了对 RFC4330 验证方案的更严格遵循
  2. Timothy Mertz:修复了偏移计算中可能的溢出
  3. HannesH:修复了 README.md 中的一个错别字
  4. Richard Penney:将 NTP 服务器的准确性添加到 NtpResult 结构中的两个指示器
  5. Vitali Pikulik:添加了对 async 的支持
  6. tsingwong:修复了 README.md 中的无效链接
  7. Robert Bastian:修复了 calculate_offset 中的溢出问题

非常感谢大家的努力!如果我在名单上遗漏了任何人,请告诉我

许可协议


本项目采用

除非你明确表示否则,根据 3-Clause BSD 许可协议定义的,你有意提交的任何贡献,都应按上述方式许可,而无需任何额外的条款或条件。

依赖项

~0.2–6.5MB
~35K SLoC