物联网中使用 Coap 协议实验手册(二)

上一篇文章 向大家介绍了一个简单的 coap 服务和客户端的实现。本文将继续深入,介绍 coap 协议中的通知功能。

添加可通知的资源

在 coap-server 项目中的 cn.com.hohistar.iot.coap.resources 包中添加一个名为: ObserveResource 的类。与上一篇文章中的 HelloWorldResource 一样,该类继承于: CoapResource。建立好以后,修改代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class ObserveResource extends CoapResource {

public ObserveResource(String name) {
super(name);

setObservable(true);
setObserveType(CoAP.Type.CON);
getAttributes().setObservable();

Timer timer = new Timer();
timer.schedule(new UpdateTask(), 0, 1000);
}

private class UpdateTask extends TimerTask {

@Override
public void run() {
changed();
}
}

@Override
public void handleGET(CoapExchange exchange) {
exchange.setMaxAge(1);
exchange.respond("Current value: 10.8");
}
}

修改 Coap Server

修改 CoapService.java 文件,在 simpleListen 方法中加入新的资源:

1
2
ObserveResource observeResource = new ObserveResource("observe-res");
server.add(observeResource);

修改后的完整方法代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void simpleListen() {

CoapService server = new CoapService();

HelloWorldResource helloworldRes = new HelloWorldResource("hello-world");
server.add(helloworldRes);

ObserveResource observeResource = new ObserveResource("observe-res");
server.add(observeResource);

server.start();

System.out.println("Server startup...");

}

修改客户的代码

在 BasicClient.java 文件中添加一个新的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void startObserver() {

CoapClient client = new CoapClient("coap://127.0.0.1:5683/observe-res");

AsyncListener asyncListener = new AsyncListener();
CoapObserveRelation observeRelation = client.observe(asyncListener);

try {
System.in.read();
} catch(IOException e) {
e.printStackTrace();
}

System.out.println("Existing...");

observeRelation.proactiveCancel();
}

然后将 main 函数的中代码修改为:

1
2
3
4
5
public static void main(String args[]) {

// start();
startObserver();
}

验证结果

先运行服务端,然后运行客户端,在客户的的输出中可以看到类似如下的结果:

1
2
3
4
5
response: Current value: 10.8
response: Current value: 10.8
response: Current value: 10.8
response: Current value: 10.8
...

客户端的信息被服务端每秒通知一次。

本文标题:物联网中使用 Coap 协议实验手册(二)

文章作者:Morning Star

发布时间:2019年11月19日 - 07:11

最后更新:2021年04月16日 - 15:04

原始链接:https://www.mls-tech.info/iot/java-coap-practice-02/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。