CoAP是为物联网而生,短小精悍,它底层基于UDP协议的,其它具体参考百度百科,本例子是基于Californium框架。
1、先决条件
java环境
eclipse工具
Maven插件(有最好,不需要手动下载jar引入,没有的话手动引入)
2、下载Californium框架核心jar
californium-core.jar : 包括CoAP核心部分
element-connector.jar 包括适用于UDP和DTLS的java套接字抽象层
scandium.jar: 包括DTLS
-
<dependency>
-
<groupId>org.eclipse.californium</groupId>
-
<artifactId>californium-core</artifactId>
-
<version>2.0.0-M7</version>
-
</dependency>
-
<dependency>
-
<groupId>org.eclipse.californium</groupId>
-
<artifactId>element-connector</artifactId>
-
<version>2.0.0-M7</version>
-
</dependency>
-
<dependency>
-
<groupId>org.eclipse.californium</groupId>
-
<artifactId>scandium</artifactId>
-
<version>2.0.0-M7</version>
-
</dependency>
已经下载打包成集合:下载地址 (不能设置积分为0,尴尬了)
3、创建java工程或Maven工程,创建一个Server类
-
import org.eclipse.californium.core.CoapResource;
-
import org.eclipse.californium.core.CoapServer;
-
import org.eclipse.californium.core.coap.CoAP.ResponseCode;
-
import org.eclipse.californium.core.server.resources.CoapExchange;
-
public class HelloCoAPServer {
-
public static void main(String[] args) {
-
CoapServer server = new CoapServer();//主机为localhost 端口为默认端口5683
-
server.add(new CoapResource("hello"){//创建一个资源为hello 请求格式为 主机:端口\hello
-
@Override
-
public void handleGET(CoapExchange exchange) { //重写处理GET请求的方法
-
exchange.respond(ResponseCode.CONTENT, "Hello CoAP!");
-
}
-
});
-
server.add(new CoapResource("time"){ //创建一个资源为time 请求格式为 主机:端口\time
-
@Override
-
public void handleGET(CoapExchange exchange) {
-
Date date = new Date();
-
exchange.respond(ResponseCode.CONTENT,
-
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date));
-
}
-
});
-
server.start();
-
}
-
}
4、创建一个客户端:
-
public class GETClient {
-
public static void main(String[] args) throws URISyntaxException {
-
URI uri = null;
-
uri = new URI("localhost:5683/hello"); //创建一个资源请求hello资源,注意默认端口为5683
-
CoapClient client = new CoapClient(uri);
-
CoapResponse response = client.get();
-
if(response !=null){
-
System.out.println(response.getCode()); //打印请求状态码
-
System.out.println(response.getOptions()); //选项参数
-
System.out.println(response.getResponseText()); //获取内容文本信息
-
System.out.println("\nAdvanced\n"); //
-
System.out.println(Utils.prettyPrint(response)); //打印格式良好的输出
-
}
-
}
-
}
5、测试
先运行HelloCoAPServer的main方法
然后运行GETClient的main方法
6、日志:
-
2.05
-
{"Content-Format":"text/plain"}
-
Hello CoAP!
-
Advanced
-
==[ CoAP Response ]============================================
-
MID : 10763
-
Token : [aab3ac5818d1e598]
-
Type : ACK
-
Status : 2.05
-
Options: {"Content-Format":"text/plain"}
-
RTT : 26 ms
-
Payload: 11 Bytes
-
---------------------------------------------------------------
-
Hello CoAP!
-
===============================================================
总结:其实它跟UDP,TCP 类似的。
参考:《IoT开发实战 CoAP卷》