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日

近期下载者

相关文件


收藏者