news 2026/7/3 12:56:14

Java 对接 CoAP 完整方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 对接 CoAP 完整方案

CoAP 是物联网轻量协议(UDP、二进制、低功耗),Java 主流两个库:

  1. Californium (Cf):工业标准、功能最全,支持 CoAP RFC7252、DTLS、资源观察、块传输(首选)
  2. 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服务)

importorg.eclipse.californium.core.CoapClient;importorg.eclipse.californium.core.CoapResponse;importorg.eclipse.californium.core.coap.MediaTypeRegistry;publicclassCoapSimpleClient{publicstaticvoidmain(String[]args){// coap://IP:端口/资源路径Stringuri="coap://127.0.0.1:5683/sensor/temp";CoapClientclient=newCoapClient(uri);try{// 1. GET 请求(读取设备数据)CoapResponsegetResp=client.get();if(getResp.isSuccess()){System.out.println("GET 响应:"+getResp.getResponseText());System.out.println("状态码:"+getResp.getCode());}// 2. PUT 请求(下发配置,携带JSON)Stringpayload="{\"temp\":25}";CoapResponseputResp=client.put(payload,MediaTypeRegistry.APPLICATION_JSON);// 3. POST 请求(上报数据/执行指令)CoapResponsepostResp=client.post("open",MediaTypeRegistry.TEXT_PLAIN);// 4. DELETEclient.delete();}catch(Exceptione){e.printStackTrace();}finally{client.close();}}}

3. CoAP 服务端(Java 搭建CoAP服务,供设备上报)

importorg.eclipse.californium.core.CoapResource;importorg.eclipse.californium.core.CoapServer;importorg.eclipse.californium.core.server.resources.CoapExchange;publicclassCoapSimpleServer{publicstaticvoidmain(String[]args){CoapServerserver=newCoapServer(5683);// 默认5683端口// 定义资源 /sensor/tempCoapResourcetempResource=newCoapResource("temp"){@OverridepublicvoidhandleGET(CoapExchangeexchange){// 设备读取温度exchange.respond("26.5 ℃");}@OverridepublicvoidhandlePOST(CoapExchangeexchange){// 设备POST上报数据Stringdata=exchange.getRequestText();System.out.println("设备上报:"+data);exchange.respond(201,"ok");}@OverridepublicvoidhandlePUT(CoapExchangeexchange){Stringcfg=exchange.getRequestText();System.out.println("下发配置:"+cfg);exchange.respond("update success");}};CoapResourcesensorRoot=newCoapResource("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 加密地址,需加载证书CoapClientsecureClient=newCoapClient("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 区别(物联网选型)

特性CoAPMQTT
传输层UDPTCP
头部大小极小(4B起)较大
安全DTLSTLS
适用低功耗单片机、电池设备网关、云端、大量长连接设备
交互模型请求响应(REST风格)发布订阅

四、常见踩坑点

  1. 端口:CoAP 默认5683;加密 coaps5684,防火墙开放UDP
  2. UDP 丢包:CoAP 自带重传,但弱网建议增加超时client.setTimeout(3000);
  3. 数据包过大:开启块传输,Californium 自动处理
  4. 设备DTLS证书:使用scandium生成密钥对,一机一密

五、SpringBoot 集成 CoAP 扩展

如果是 SpringBoot 项目,可封装工具类:

  1. 全局单例 CoapClient 池(避免频繁创建销毁)
  2. 统一异常拦截、消息日志
  3. DTLS 证书配置读取yml
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 12:51:31

企业官网建设中,如何用 FAQ 页面承接搜索和 AI 问答流量?

很多企业官网在建设时&#xff0c;会重点关注首页、服务页、案例页和联系页&#xff0c;却容易忽略一个页面&#xff1a;FAQ 页面。 FAQ&#xff0c;也就是常见问题页面。过去它更多是为了降低客户沟通成本&#xff0c;让用户在咨询前先了解基础信息。现在随着搜索引擎和 AI 问…

作者头像 李华
网站建设 2026/7/3 12:48:32

如何一键导出QQ空间全部历史说说:GetQzonehistory完整指南

如何一键导出QQ空间全部历史说说&#xff1a;GetQzonehistory完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾经想要找回那些消失在QQ空间中的青春记忆&#xff1f;那些…

作者头像 李华
网站建设 2026/7/3 12:47:32

TC78H653FTG驱动直流有刷电机的高效控制方案

1. 为什么选择TC78H653FTG驱动直流有刷电机第一次接触TC78H653FTG这颗驱动芯片是在去年一个工业控制项目里。当时需要驱动24V/5A的直流有刷电机&#xff0c;市面上常见的L298N模块在长时间工作时发热严重&#xff0c;而更专业的驱动方案又过于复杂。直到发现罗姆(ROHM)这颗全集…

作者头像 李华
网站建设 2026/7/3 12:43:15

Linux LVM动态扩容实战指南与最佳实践

1. LVM扩容实战概述在Linux系统管理中&#xff0c;LVM&#xff08;Logical Volume Manager&#xff09;是存储管理的核心工具之一。它通过抽象物理存储设备&#xff0c;提供了比传统分区更灵活的磁盘管理方式。当现有存储空间不足时&#xff0c;LVM的动态扩容能力成为系统管理员…

作者头像 李华
网站建设 2026/7/3 12:40:06

终极OneNote效率革命:OneMore插件的完整应用指南

终极OneNote效率革命&#xff1a;OneMore插件的完整应用指南 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore 你是否厌倦了在OneNote中重复繁琐的操作&#xff1f;是否…

作者头像 李华