Java对接CoAP的完整方案
更新时间:2026年07月03日 08:24:07 作者:思静鱼
本文深度解析CoAP协议,对比Californium与coap-java两大主流库,手把手教你实现CoAP客户端、服务端及Observe、DTLS加密等高级功能,需要的朋友可以参考下
CoAP 是物联网轻量协议(UDP、二进制、低功耗),Java 主流两个库:
- Californium (Cf):工业标准、功能最全,支持 CoAP RFC7252、DTLS、资源观察、块传输(首选)
- coap-java:轻量简单,仅基础 CoAP,无 DTLS,适合简单测试
一、Californium(推荐,生产用)
1. Maven 依赖
<!-- core 核心 -->
<dependency>
<groupId>org.eclipse.californium</groupId>
<artifactId>californium-core</artifactId>
<version>3.9.0</version>
</dependency>
<!-- coap协议标准封装 -->
<dependency>
<groupId>org.eclipse.californium</groupId>
<artifactId>element-connector</artifactId>
<version>3.9.0</version>
</dependency>
<!-- DTLS 加密(设备安全通信必加) -->
<dependency>
<groupId>org.eclipse.californium</groupId>
<artifactId>scandium-core</artifactId>
<version>3.9.0</version>
</dependency>2. CoAP 客户端(请求设备/CoAP服务)
import org.eclipse.californium.core.CoapClient;
import org.eclipse.californium.core.CoapResponse;
import org.eclipse.californium.core.coap.MediaTypeRegistry;
public class CoapSimpleClient {
public static void main(String[] args) {
// coap://IP:端口/资源路径
String uri = "coap://127.0.0.1:5683/sensor/temp";
CoapClient client = new CoapClient(uri);
try {
// 1. GET 请求(读取设备数据)
CoapResponse getResp = client.get();
if (getResp.isSuccess()) {
System.out.println("GET 响应:" + getResp.getResponseText());
System.out.println("状态码:" + getResp.getCode());
}
// 2. PUT 请求(下发配置,携带JSON)
String payload = "{\"temp\":25}";
CoapResponse putResp = client.put(
payload,
MediaTypeRegistry.APPLICATION_JSON
);
// 3. POST 请求(上报数据/执行指令)
CoapResponse postResp = client.post(
"open",
MediaTypeRegistry.TEXT_PLAIN
);
// 4. DELETE
client.delete();
} catch (Exception e) {
e.printStackTrace();
} finally {
client.close();
}
}
}
3. CoAP 服务端(Java 搭建CoAP服务,供设备上报)
import org.eclipse.californium.core.CoapResource;
import org.eclipse.californium.core.CoapServer;
import org.eclipse.californium.core.server.resources.CoapExchange;
public class CoapSimpleServer {
public static void main(String[] args) {
CoapServer server = new CoapServer(5683); // 默认5683端口
// 定义资源 /sensor/temp
CoapResource tempResource = new CoapResource("temp") {
@Override
public void handleGET(CoapExchange exchange) {
// 设备读取温度
exchange.respond("26.5 ℃");
}
@Override
public void handlePOST(CoapExchange exchange) {
// 设备POST上报数据
String data = exchange.getRequestText();
System.out.println("设备上报:" + data);
exchange.respond(201, "ok");
}
@Override
public void handlePUT(CoapExchange exchange) {
String cfg = exchange.getRequestText();
System.out.println("下发配置:" + cfg);
exchange.respond("update success");
}
};
CoapResource sensorRoot = new CoapResource("sensor");
sensorRoot.add(tempResource);
server.add(sensorRoot);
server.start();
System.out.println("CoAP Server 启动,端口5683");
}
}
4. 关键高级功能(物联网常用)
(1)观察模式 Observe(设备主动推送,类似订阅)
// 客户端订阅资源变化
client.observe(resp -> {
System.out.println("推送数据:" + resp.getResponseText());
});
(2)DTLS 加密 coaps:// 安全传输
// coaps 加密地址,需加载证书
CoapClient secureClient = new CoapClient("coaps://127.0.0.1:5684/device");
(3)块传输(大数据分包,CoAP块1/块2)
Californium 默认自动分片,无需手动处理。
二、轻量 coap-java(简单测试场景)
Maven
<dependency>
<groupId>com.github.svetleishaya</groupId>
<artifactId>coap-java</artifactId>
<version>1.4.0</version>
</dependency>示例极简,但不支持DTLS、Observe、工业扩展,仅学习用,不推荐生产。
三、CoAP 与 MQTT 区别(物联网选型)
| 特性 | CoAP | MQTT |
|---|---|---|
| 传输层 | UDP | TCP |
| 头部大小 | 极小(4B起) | 较大 |
| 安全 | DTLS | TLS |
| 适用 | 低功耗单片机、电池设备 | 网关、云端、大量长连接设备 |
| 交互模型 | 请求响应(REST风格) | 发布订阅 |
四、常见踩坑点
- 端口:CoAP 默认 5683;加密 coaps 5684,防火墙开放UDP
- UDP 丢包:CoAP 自带重传,但弱网建议增加超时
client.setTimeout(3000); - 数据包过大:开启块传输,Californium 自动处理
- 设备DTLS证书:使用
scandium生成密钥对,一机一密
五、SpringBoot 集成 CoAP 扩展
如果是 SpringBoot 项目,可封装工具类:
- 全局单例 CoapClient 池(避免频繁创建销毁)
- 统一异常拦截、消息日志
- DTLS 证书配置读取yml
以上就是Java对接CoAP的完整方案的详细内容,更多关于Java对接CoAP方案的资料请关注脚本之家其它相关文章!
相关文章
macOS中搭建Java8开发环境(基于Intel x86 64-bit)
这篇文章主要介绍了macOS中搭建Java8开发环境(基于Intel x86 64-bit) 的相关资料,需要的朋友可以参考下2022-12-12
Spring Data JPA实现查询结果返回map或自定义的实体类
这篇文章主要介绍了Spring Data JPA实现查询结果返回map或自定义的实体类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-12-12
Java中字符串String的+和+=及循环操作String原理详解
Java编译器在编译时对String的+和+=操作会创建StringBuilder对象来进行字符串的拼接,下面这篇文章主要给大家介绍了关于Java中字符串String的+和+=及循环操作String原理的相关资料,需要的朋友可以参考下2023-01-01
SpringBoot + Spring Security 基本使用及个性化登录配置详解
这篇文章主要介绍了SpringBoot + Spring Security 基本使用及个性化登录配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-05-05
一文详解Spring中ResponseEntity包装器的使用
在 Spring 中,ResponseEntity 是 HTTP 响应的包装器,这篇文章主要为大家详细介绍了ResponseEntity包装器的使用,感兴趣的可以了解一下2025-02-02


最新评论