一、项目介绍
树莓派上通过一线协议连接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
四、项目代码
https://github.com/SheaLiao/APUE_Project
标签:采样,树莓,https,APUE,服务器端,监控,上报,com,客户端 From: https://www.cnblogs.com/LiBlog--/p/18146703