经过上一章的简单Helloword,相信很多读者都看出来了,上面的案例就是一个简单的Get请求,请求方式甚至是和Http协议的get请求方式如出一辙。而这里又多做了get请求的介绍似乎有点画蛇添足的感觉。非也!这一章的重点不会过多的介绍get的请求实现,而是整体介绍一下coap请求的几种请求方式的实现。
californium coap依赖包介绍:
如上图,依赖的jar包主要是
1:californium-core coap依赖工具的核心jar包
2-element-connector UDP链接实现jar包
3-scandium dtls coap协议的安全机制实现就像https,coap也有coaps实现
californium-core就像spring framework框架一样也是会有spring-core在核心jar包封装了我们常用的框架的设计模式,以及诸如等实现方式。同理element-connector ,就像jdbc的链接一样只不过他的实现并不是对数据库的链接,而是http协议的实现。而element-connector是对UDP协议的实现。
由于Http协议的开销很大,因为http协议添加了对数据的健壮性,以及报文的顺序性,所以在物联网应用场景单个设备板子 buffer并不是很大,而且网络带宽也还是在3G,4G的状态,不可能对网络环境进行更高速率的网络传输。而UDP相对于TCP在物联网环境下优势就很明显。
如图所示,coap协议是基于UDP的网络协议。该类的介绍会在后面异议的简介。
至此我们先来实现GET请求。
1-Client代码实现:
package com.zhai.coap.demon02_GET;
import org.eclipse.californium.core.CoapClient;
import org.eclipse.californium.core.coap.Request;
public class DemonClient02 {
public static void main(String[] args) {
createCoapGet();
}
public static void createCoapGet() {
final CoapClient client = new CoapClient("coap://localhost:5683/get_client");
Request request = Request.newGet();
request.setPayload("Hello I am Client. i = "+1);
/**
* @see 设置udp为相应方式
*/
client.useCONs();
client.useExecutor();
client.advanced(new DemonHandler02(), request);
}
}
2-ClientHandler代码实现
package com.zhai.coap.demon02_GET;
import org.eclipse.californium.core.CoapHandler;
import org.eclipse.californium.core.CoapResponse;
public class DemonHandler02 implements CoapHandler {
public void onLoad(CoapResponse response) {
String conte = response.getResponseText();
System.out.println(conte);
}
public void onError() {
System.err.println("Client Error");
}
}
3-server端代码实现:
package com.zhai.coap.demon02_GET;
import org.eclipse.californium.core.CoapServer;
import org.eclipse.californium.core.network.CoapEndpoint;
public class DemonServer02 {
public static void main(String[] args) {
CoapServer server = new CoapServer();
CoapEndpoint endpoint = new CoapEndpoint(5683);
server.addEndpoint(endpoint);
server.add(new DemonResource02("get_client"));
server.start();
}
}
4-serverResource代码实现
package com.zhai.coap.demon02_GET;
import org.eclipse.californium.core.CoapResource;
import org.eclipse.californium.core.server.resources.CoapExchange;
public class DemonResource02 extends CoapResource{
public DemonResource02(String name) {
super(name);
}
@Override
public void handleGET(CoapExchange exchange) {
String clientContent = exchange.getRequestText();
System.out.println(clientContent);
exchange.respond("Hello I am Server, " + clientContent);
}
}
代码实现介绍:
Request request = Request.newGet();
创建一个Request GET请求方式,查看源码:
如上所示Request的构造方法设置了请求的响应方式
Code源码查看:
这是一个定义在内部的实现类实现了请求的响应方式。GET,POST,PUT,DELETE
request.setPayload("Hello I am Client. i = "+1);
在请求的pyload中设置响应发送到Server端的数据。
client.useCONs(); 设置请求为需要server端相应确认方式
client.useExecutor(); 设置请求响应后台创建线程等待确认
client.advanced(new DemonHandler02(), request); 设置请求自定义处理程序,在handler有两个实现方法。
public void onLoad(CoapResponse response) {}
public void onError() {}
两个方法顾名思义。onload是对收到的响应数据进一步做处理,可以保存到数据库,也可以发送到指定的位置。
而onError方法。主要是针对异常的一些处理。
下一章会单独讲解一下关于 client.useExecutor(); 该方法的介绍,主要是针对coap client的多线程处理机制的实现,以及后台服务的优化。
至此小编已经连续的写了三篇关于coap的文章了,如果大家觉得有意义,帮我点个赞,再走吧,鼓励一下小编继续将文档补充下去。如果大家有什么问题欢迎到评论区留言。谢谢大家。