model
所属分类:Windows编程
开发工具:Visual C++
文件大小:54KB
下载次数:38
上传日期:2012-05-17 20:18:35
上 传 者:
imfress
说明: 实现从传感器实时收集数据、插入sqlite3、传送到远程服务器、存入mysql、在网页上显示
(Realization of real time data collection from sensors, insert the SQLite3, is transmitted to a remote server, in mysql, in the webpage display
)
文件列表:
数据获取、发送、接收\数据发送\senddata (12484, 2012-04-30)
数据获取、发送、接收\数据发送\senddata.c (5753, 2012-04-30)
数据获取、发送、接收\数据接收\mysql建立表格.txt (219, 2012-04-30)
数据获取、发送、接收\数据接收\TCPServer.class (3125, 2012-04-30)
数据获取、发送、接收\数据接收\TCPServer.java (3086, 2012-04-30)
数据获取、发送、接收\数据获取\aaaaSelf_Sensor.c (9628, 2012-02-26)
数据获取、发送、接收\数据获取\Analysis_Net.c (6044, 2012-03-20)
数据获取、发送、接收\数据获取\Analysis_Net.h (1251, 2012-03-20)
数据获取、发送、接收\数据获取\Analysis_Sensor.c (5756, 2012-04-30)
数据获取、发送、接收\数据获取\Analysis_Sensor.h (1780, 2012-04-30)
数据获取、发送、接收\数据获取\Analysis_Sensor.o (8472, 2012-04-30)
数据获取、发送、接收\数据获取\Com_Net (25454, 2012-03-20)
数据获取、发送、接收\数据获取\Com_Sensor (24065, 2012-04-30)
数据获取、发送、接收\数据获取\Console.c (4179, 2012-04-30)
数据获取、发送、接收\数据获取\Console.c.bak (3427, 2012-03-20)
数据获取、发送、接收\数据获取\Console.o (9912, 2012-04-30)
数据获取、发送、接收\数据获取\Makefile (533, 2012-03-20)
数据获取、发送、接收\数据获取\seninfo.db (0, 2012-04-30)
数据获取、发送、接收\数据获取\Sensordatainfo.db (0, 2012-04-30)
数据获取、发送、接收\数据获取\Sensorinfo.db (4096, 2012-04-30)
数据获取、发送、接收\数据获取\Unity.c (945, 2012-03-20)
数据获取、发送、接收\数据获取\Unity.h (238, 2012-03-20)
数据获取、发送、接收\数据获取\Unity.o (4172, 2012-04-30)
数据获取、发送、接收\数据获取\使用说明.txt (1080, 2012-03-05)
数据获取、发送、接收\网页显示\haha.jsp (3367, 2012-05-04)
数据获取、发送、接收\数据发送 (0, 2012-04-30)
数据获取、发送、接收\数据接收 (0, 2012-04-30)
数据获取、发送、接收\数据获取 (0, 2012-04-30)
数据获取、发送、接收\网页显示 (0, 2012-05-04)
数据获取、发送、接收 (0, 2012-05-04)
本包是在ComSensor实验基础上经过修改而来的,具体修改的有Console.c文件、senddata.c文件、Analysis_Sensor.c文件
Console.c文件修改的如下:
sql = "CREATE TABLE IF NOT EXISTS Sdata (id int,datetime datetime ,Temperature float,Humidity float,flag int default 0)";
这里是在建立表格的时候,追加一列数(flag)用来做标记,实现数据不重复发送“flag int default 0”,我们默认将它设置为“0”。
Analysis_Sensor.c文件的修改如下:
sql = sqlite3_mprintf("insert into Sdata(id,datetime,Temperature,Humidity) values(%d,datetime('now', 'localtime'),%f,%f)",count++,data1,data2);
这里我们加入“Sdata(id,datetime,Temperature,Humidity)”,实现指定字段插入,至于flag字段,因为已经是默认的,所以不必加入,系统会默认加入。
senddata.c文件的修改如下:
将while(1)
{
的大括号移动至文件尾部,在“return 0”;之前,并在尾部加入如下代码:
/* socket: create the socket */
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
/* gethostbyname: get the server's DNS entry */
server = gethostbyname(hostname);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host as %s\n", hostname);
exit(0);
}
/* build the server's Internet address */
bzero((char *) &serveraddr, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serveraddr.sin_addr.s_addr, server->h_length);
serveraddr.sin_port = htons(portno);
/* connect: create a connection with the server */
if (connect(sockfd, &serveraddr, sizeof(serveraddr)) < 0)
error("ERROR connecting");
//Start of retrieving data from Sqlite3 database
为什么要加入这块代码呢?
这是因为,我们要实现不断的发送,就要不断的链接,而之前,在while(1)之前,我们就有建立一个socket,链接到数据库,
要新定义“char *sql;”、“int retval2”因为下面会用到
更改“queries[ind++] = "SELECT * from Sdata where flag ==0";///////////”
本来是只有“queries[ind++] = "SELECT * from Sdata”,加入“where flag=0”是为了实现重复数据不重复发送,因为每一次发送我们都只取flag=0的那段数据发送
更改“int cols = sqlite3_column_count(stmt)-1;//取列数”
本来是只有“int cols = sqlite3_column_count(stmt);”的,cols取得表格的列数,本来表格是一共有五列,分别为:“id”、“datetime”、“”、“”、“”、“flag”,但是我们发送flag是没有意义的,所以,只取cols为4,取4列。
在if(retval == SQLITE_ROW)
{
}
内部加入如下代码:
const char *val2 = (const char*)sqlite3_column_text(stmt,0);/////////////////////
// SQLITE_ROW means fetched a row
sql = sqlite3_mprintf("update Sdata set flag=1 where id='%s'",val2);/////////////
sqlite3_exec(handle,sql,0,0,0);/////////////////////////
// sqlite3_column_text returns a const void* , typecast it to const char*
这段代码的作用是将flag转换为1,实现重复数据不重复发送。
(数据的发送是一行一行进行发送的,将每一列值取出,合成一串,发送!!!)
声明::
在sqlite3中,我们存入数据的数据库名:Seninfo.db,表名:Sdata
在mysql中,我们存入数据的数据库名:Sen,表名: Sdata
编辑:Arthur 2012年4月30日
近期下载者:
相关文件:
收藏者: