津南区提供网站建设协议,北京金山办公软件股份有限公司招聘,大型门户网站都有,石家庄大的网站开发公司rust及其高效和安全著称#xff0c;而且支持跨平台#xff0c;所以就想使用这个rust开发一个桌面端程序#xff0c;来读取nfc设备的nfc卡片的id信息#xff0c;下面就做一个最简单的入门教程吧#xff0c;也是我写的第三个rust应用。
当你电脑上安装好了rust环境之后而且支持跨平台所以就想使用这个rust开发一个桌面端程序来读取nfc设备的nfc卡片的id信息下面就做一个最简单的入门教程吧也是我写的第三个rust应用。
当你电脑上安装好了rust环境之后先创建一个简单的项目然后安装依赖然后写一个简单的代码然后执行即可。
创建项目
使用rust的包管理创建一个项目cargo new hello-word
创建之后的目录结构如下 .git这是一个隐藏文件夹用于git软件实现版本管理学习rust期间一般用不着不用管 src这是存放代码的地方以后我们写的rust代码就放在这个文件夹里面 .gitignore这同样是git使用的用于忽略哪些类型文件不进行版本管理一般同样不用管 注意git并不是rust的一部分而是一个所有语言通用的版本控制工具比如知名的github便是用的git进行版本管理
Cargo.toml :这个文件就很重要了cargo作为rust的包管理程序就是通过这个文件知道你这个项目中需要哪些依赖库的。
使用vs code 打开这个项目然后看一下内容 对于你想要用到的库直接写在[dependencies]项的下面即可后面我会再对其进行详细介绍
然后来到src这个存放rust代码的目录里面 安装依赖并写代码
[dependencies]
pcsc 2.8.1
然后运行命令 cargo build 将main.rs代码改为下面的代码
use pcsc::*;fn main() - Result(), Error {// 创建一个新的上下文let ctx Context::establish(Scope::User)?;// 列出可用的读卡器let mut readers_buf [0; 2048];let mut readers ctx.list_readers(mut readers_buf)?;// 打开第一个读卡器let reader readers.next().ok_or(Error::NoReadersAvailable)?;println!(Card reader:);let card ctx.connect(reader, ShareMode::Shared, Protocols::ANY)?;// 发送 APDU 命令获取卡片 UIDlet apdu_command [0xFF, 0xCA, 0x00, 0x00, 0x00];let mut apdu_response [0; 256];let response_len card.transmit(apdu_command.to_vec(), mut apdu_response)?;// 提取卡片 UID// let card_uid apdu_response[..response_len - 2];// 输出卡片 UIDprintln!(Card UID: {:02X?}, response_len);Ok(())
}此时将ACR122U连上电脑并放上nfc卡 运行并编译
然后运行命令cargo run
就可以看到UID已经打印出来了 然后运行编译命令cargo build --release 就会编译为可执行文件 然后运行这个exe也可以读取到卡片信息 进阶循环监听
使用循环和异常捕获实现实时监听功能代码如下
use pcsc::*;fn main() {println!(Starting...);loop {// thread::sleep(Duration::from_secs(1));// println!(Done!);match divide() {Ok(_) (),Err(_) (),}}
}fn divide() - Result(), Error {// 创建一个新的上下文let ctx Context::establish(Scope::User)?;// 列出可用的读卡器let mut readers_buf [0; 2048];let mut readers ctx.list_readers(mut readers_buf)?;// 打开第一个读卡器let reader readers.next().ok_or(Error::NoReadersAvailable)?;// println!(Card reader:);let card ctx.connect(reader, ShareMode::Shared, Protocols::ANY)?;// 发送 APDU 命令获取卡片 UIDlet apdu_command [0xFF, 0xCA, 0x00, 0x00, 0x00];let mut apdu_response [0; 256];let response_len card.transmit(apdu_command.to_vec(), mut apdu_response)?;// 提取卡片 UID// let card_uid apdu_response[..response_len - 2];// 输出卡片 UIDprintln!(Card UID: {:02X?}, response_len);Ok(())
}