Eclipse的californium之GET 章节三

经过上一章的简单Helloword,相信很多读者都看出来了,上面的案例就是一个简单的Get请求,请求方式甚至是和Http协议的get请求方式如出一辙。而这里又多做了get请求的介绍似乎有点画蛇添足的感觉。非也!这一章的重点不会过多的介绍get的请求实现,而是整体介绍一下coap请求的几种请求方式的实现。

californium coap依赖包介绍:


Eclipse的californium之GET 章节三_第1张图片
核心jar包截图

如上图,依赖的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在物联网环境下优势就很明显。


Eclipse的californium之GET 章节三_第2张图片
Coap协议UDP链接实现类

如图所示,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请求方式,查看源码:



Eclipse的californium之GET 章节三_第3张图片
Reuqest源码截图

如上所示Request的构造方法设置了请求的响应方式


Eclipse的californium之GET 章节三_第4张图片
请求方式的响应以Code为准

Code源码查看:


Eclipse的californium之GET 章节三_第5张图片
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的文章了,如果大家觉得有意义,帮我点个赞,再走吧,鼓励一下小编继续将文档补充下去。如果大家有什么问题欢迎到评论区留言。谢谢大家。

你可能感兴趣的:(Eclipse的californium之GET 章节三)