学习 Rust 做了个模拟自动应答机的小玩具

70 天前
 libook

https://github.com/libook/net-ssr

把树莓派接入了一个网络,但不知道它被分配到了什么 IP ,需要接显示器或者做个自动上报 IP 。

当然要想解决我的问题有很多方法,但我只是想写写代码玩玩。

突发奇想做个自动应答机。树莓派上跑一个应答端,我在电脑上装个询问端,询问端在网络内广播 UDP 数据,应答机收到后自动应答自己的 IP 和 hostname 。

探索了一下 Rust 中的回调函数实现方式、clap 命令行库、build.rs 脚本的用法,对 Rust 的 crate 和 mod 机制有了更多的了解。

比如需要 build.rs 共用 src 里的一些代码的时候,尝试了 include!宏直接引入包含共享代码的文件,会产生一些难以解决的 dead code warning ;尝试了将共用代码分成独立 crate 再从 build.rs 和程序里 use ,但拆分出来的 crate 必须要单独 publish 而不能被携带在主 crate 的源代码中;尝试了软连接但是对 Windows 的兼容性可能不好。最终我发现了有人使用#[path=]这个属性在 build.rs 中引入共享代码,尝试了一下完美解决 dead code warning 的问题。

再比如 bin 入口文件中直接使用 mod 指令引入其他非 lib.rs 文件也会出现 dead code warning ,貌似 rust 编译器推荐所有库文件都最好在 lib.rs 中 pub mod 出来,再给 bin 入口文件引入使用。

这个程序在 Windows 上编译需要 Packet.lib ,要安装 Npcap ,完全不熟悉 Windows 的环境变量和链接库机制,调试环境变量调试了好久……

648 次点击
所在节点    Rust
1 条回复
tinybaby365
56 天前
你这个需求不要使用 pnet 吧?用个 ssdp 库比较合适。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1055668

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX