APUE-树莓派温度监控
一、项目介绍
树莓派上通过一线协议连接DS18B20,然后采用网络socket编程同时实现客户端和服务器端程序,其中客户端主要实现定时上报的功能,服务器端用来采集客户端上报的数据并存储到数据库中。
1、客户端介绍
- 连接服务器的主机名和端口号可以通过命令行参数修改;
- 客户端程序需要定时采样上报 一次数据,该时间也可以通过命令行参数来调整;
- 客户端上报数据包含设备序列号、采样时间、采样温度值,并以字符串形式上报;
- 如果网络socket异常(如网络断线、服务器端退出),在网络故障恢复后客户端程序能够自动重连;
- 在网络故障出错期间,定时采样正常进行,在此瞬间所有采样的数据临时存储到SQLite数据库中;
- 网络故障恢复之后,客户端程序自动将之前暂存到数据库中的数据上报销服务器上去, 并从里面删除。
2、服务器端介绍
- 服务器端程序要能够通过命令行指定该程序监听的端口号;
- 服务器端要采用多进程、多线程或多路复用等机制中的某一种实现多客户端并发上报;
- 服务器端在接受到客户端上报的数据并解析成功之后,应该将数据永久存储到数据库中。
三、问题
1、断线重连如何实现:
使用getsocketopt() 可以确认连接状态
https://www.cnblogs.com/LiBlog--/p/18072747
2、使用makefile运行程序时找不到动态库:
makefile里每一个指令是一个独立的进程,export这一行是一个进程,export是临时改变环境变量,它结束了以后,对于下一行执行的这个进程来说,环境变量其实并没有改变。
https://www.cnblogs.com/LiBlog--/p/18072903
3、使用开源库sqlite3导致内存泄漏:
使用valgrind检查内存泄漏
https://www.cnblogs.com/LiBlog--/p/18127171
四、项目代码
本文作者:LiBlog--
本文链接:https://www.cnblogs.com/LiBlog--/p/18146703
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步