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 日期和时间
7,325 每月下载量
用于 4 crates
64KB
1K SLoC
简单的 Rust SNTP 客户端
此 crate 提供了一种向 NTP 服务器发送请求并处理响应的方法,提取接收到的时间戳。
支持的 SNTP 协议版本
文档
安装
此 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
。
还有带有功能 async
的 no_std
支持,但它需要 Rust >= 1.75-nightly
版本。示例可以在 单独的存储库 中找到。
示例
您可以在 examples/ 文件夹下找到几个示例,展示了如何详细使用此库。目前,有示例显示
- 在
std
环境中使用 SNTP 库 - 使用与
smoltcp
TCP/IP 堆栈的 SNTP 库。由于 smoltcp 可用接口,需要仅使用一些std
依赖项
贡献
贡献总是受欢迎的!如果你有一个想法,最好在着手之前向我提出,以确保不会浪费任何努力。如果已经有了相关的开放问题,请继续努力。有关更多详细信息,请参阅 贡献部分
感谢
- Frank A. Stevenson:实现了对 RFC4330 验证方案的更严格遵循
- Timothy Mertz:修复了偏移计算中可能的溢出
- HannesH:修复了 README.md 中的一个错别字
- Richard Penney:将 NTP 服务器的准确性添加到
NtpResult
结构中的两个指示器 - Vitali Pikulik:添加了对
async
的支持 - tsingwong:修复了 README.md 中的无效链接
- Robert Bastian:修复了
calculate_offset
中的溢出问题
非常感谢大家的努力!如果我在名单上遗漏了任何人,请告诉我。
许可协议
本项目采用
除非你明确表示否则,根据 3-Clause BSD 许可协议定义的,你有意提交的任何贡献,都应按上述方式许可,而无需任何额外的条款或条件。
依赖项
~0.2–6.5MB
~35K SLoC