智能花盆(三)

数据库

  • id:varchar(20)nodemcu设备编号
  • ip:varchar(20)nodemcu的ip地址
  • temp:float(5.2)温度
  • humi:float(5.2)湿度

Java Web开发

将对如下的代码文件进行讲解

智能花盆(三)_第1张图片

 

SensorData

对应上面数据库的内容

OperateSql

进行数据库操作

AppRequestData_servlet

app向服务器请求数据时访问的servlet

String id = request.getParameter("id").toString();
SensorData data = OperateSql.queryData(id);
Gson gson = new Gson();
String st = gson.toJson(data);
//System.out.println(st);
		
try(PrintWriter out = new PrintWriter(response.getWriter())){
     out.println(st);
     out.flush();
}

app发送id号给这个servlet,servlet根据唯一的id号查询数据,然后返回给app。

SensorData_servlet

NodeMcu发送数据给这个servlet,同时在这个servlet中更新数据库。

AppControl_servlet

app发送信息给这个servlet来控制NodeMcu

String id = request.getParameter("id").toString();
String flag = request.getParameter("flag").toString();
SensorData data = OperateSql.queryData(id);
String ip = data.getIp();
boolean tick = false;
try {
	Socket client = new Socket(ip, 80);
	client.setSoTimeout(10000);
	//获取Socket的输出流,用来发送数据到服务端  
	try(PrintStream out = new PrintStream(client.getOutputStream());) {
	out.println(flag);
	System.out.println("与设备:"+id+"通信成功");
	tick = true;
	}
	client.close();
			
	}catch(IOException e) {
		System.out.println("与设备:"+id+"通信失败");
	}finally {
		try {
			try(PrintWriter out = new PrintWriter(response.getWriter())){
				if(tick)
					out.println("success");
				else
					out.println("fail");
		        out.flush();
		       }
		}catch(IOException e) {
				
		}
			
	}
}

app发送了id号和一个flag标志给这个servlet,但是我这里只是做了一个简单的控制,所以flag可有可无,只要能触发这个servlet就可以了。

servlet根据接收到的id查询数据库,得到对应设备的ip地址。

然后和NodeMcu间建立一个socket链接,发送flag过去,同样能触发NodeMcu的端口监听就行。

你可能感兴趣的:(物联网)