CoAP - CoAP协议协议客户端

CoAP(Constrained Application Protocol)是专用于低资源硬件的物联网协议, 它是一种基于UDP的应用层协议, 支持URL方式访问,就像HTTP请求一样,支持GET,POST,PUT,DELETE等操作。

Java包

tijos.framework.networkcenter.coap

CoAP客户端 - CoAPClient类

CoAPClient 类中包含了所有CoAP客户端相关的操作, CoAP协议一般包含4种请求, 包括POST,GET,PUT,DELETE 通过向指定URI来发送相关请求与服务器端进行交互

消息类型

CoAP采用与HTTP协议相同的请求响应工作模式。CoAP协议共有4中不同的消息类型。 CON——需要被确认的请求,如果CON请求被发送,那么对方必须做出响应。 NON——不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应。 ACK——应答消息,接受到CON消息的响应。 RST——复位消息,当接收者接受到的消息包含一个错误,接受者解析消息或者不再关心发送者发送的内容,那么复位消息将会被发送。

在实际使用中CON最为常用

URI 资源

一个CoAP资源可以被一个URI所描述, URI中不包含服务器及端口, 例如 /sensors/temperature

ContentType 内容类型

用于标识CoAP请求的内容类型, 包括 APPLICATION_TEXT_PLAIN/APPLICATION_XML/APPLICATION_JSON等等, 与CoAP服务器提供的数据格式有关。

主要方法如下:

方法 说明
CoAPClient getInstance() 获得CoAPClient实例
void connect(String serverUrl) 连接到CoAP服务器 serverUrl 格式为coap://192.168.0.10:5683 或 coaps://192.168.0.10:5684
void void disconnect() 断开连接
void void setMessageType(int messageType) 设置消息请示类型, 包括 0-CON, 1-NON, 2-ACK, 3-RST
int post(String uri, int contentType, byte[] content) 通过CoAP POST请求将数据发向指定uri, contentType 内容类型, 如APPLICATION_TEXT_PLAIN, APPLICATION_JSON 等等, 返回消息ID
int get(String uri, int contentType) 向指定URI发送GET请求,返回消息ID
int put(String uri, int contentType, byte[] content) 通过CoAP PUT请求将数据发向指定uri,返回消息ID
int delete(String uri) 向指定URI发送DELETE请求,返回消息ID
boolean isBusy() CoAP 是否仍有请求未完成, 用于在退出应用或进入待机状态时确保COAP请求已完成

ICoAPMessageListener CoAP 事件监听

ICoAPMessageListener 提供了CoAP相关事件处理接口 | 方法 | 说明 | | ---------------------------------------- | ---------- | | void getResponseArrived(String uri, int msgid, boolean result, int msgCode, byte[] payload) | GET消息返回事件 | | void postResponseArrived(String uri, int msgid, boolean result, int msgCode) | POST消息返回事件 | | void putResponseArrived(String uri, int msgid, boolean result, int msgCode) | PUT消息返回事件 | | void deleteResponseArrived(String uri, int msgid, boolean result, int msgCode) | DELETE消息返回事件 |

事件中的参数含义如下

uri - 事件有关的URI

msgid - 对应的请求消息ID

result - true:请求成功 false: 请求失败

msgCode - CoAP返回代码

使用说明

在实际使用中一般使用POST请求将数据发送到指定URI, 并通过GET请求获取指定URI的数据

调用流程如下

...

//CoAP 服务器url
String url = "coap://coap.tijcloud.com:5683";
String test_uri = "/test";

//获取CoAP客户端实例
CoAPClient coapClient = CoAPClient.getInstance();

//连接到服务器
coapClient.connect(url);

//设置事件监听
coapClient.setMessageListener(new CoAPMessageListener());

//发送POST请求到URI
String content = "test";
coapClient.post(temperature_uri, CoAPClient.APPLICATION_TEXT_PLAIN, content.getBytes());

//GET请求获取指定URI值, 结果通过getResponseArrived事件返回
coapClient.get(temperature_uri, CoAPClient.APPLICATION_TEXT_PLAIN);

//等待所有处理完成
while(coapClient.isBusy()) {
    Delay.msDelay(1000);
    System.out.println("Busy ..");
}

//断开连接
coapClient.disconnect();