Java 对接 CoAP 完整方案

📅 发布时间:2026/7/3 12:55:50 👁️ 浏览次数:
Java 对接 CoAP 完整方案
CoAP 是物联网轻量协议UDP、二进制、低功耗Java 主流两个库Californium (Cf)工业标准、功能最全支持 CoAP RFC7252、DTLS、资源观察、块传输首选coap-java轻量简单仅基础 CoAP无 DTLS适合简单测试一、Californium推荐生产用1. Maven 依赖!-- core 核心 --dependencygroupIdorg.eclipse.californium/groupIdartifactIdcalifornium-core/artifactIdversion3.9.0/version/dependency!-- coap协议标准封装 --dependencygroupIdorg.eclipse.californium/groupIdartifactIdelement-connector/artifactIdversion3.9.0/version/dependency!-- DTLS 加密设备安全通信必加 --dependencygroupIdorg.eclipse.californium/groupIdartifactIdscandium-core/artifactIdversion3.9.0/version/dependency2. CoAP 客户端请求设备/CoAP服务importorg.eclipse.californium.core.CoapClient;importorg.eclipse.californium.core.CoapResponse;importorg.eclipse.californium.core.coap.MediaTypeRegistry;publicclassCoapSimpleClient{publicstaticvoidmain(String[]args){// coap://IP:端口/资源路径Stringuricoap://127.0.0.1:5683/sensor/temp;CoapClientclientnewCoapClient(uri);try{// 1. GET 请求读取设备数据CoapResponsegetRespclient.get();if(getResp.isSuccess()){System.out.println(GET 响应getResp.getResponseText());System.out.println(状态码getResp.getCode());}// 2. PUT 请求下发配置携带JSONStringpayload{\temp\:25};CoapResponseputRespclient.put(payload,MediaTypeRegistry.APPLICATION_JSON);// 3. POST 请求上报数据/执行指令CoapResponsepostRespclient.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){CoapServerservernewCoapServer(5683);// 默认5683端口// 定义资源 /sensor/tempCoapResourcetempResourcenewCoapResource(temp){OverridepublicvoidhandleGET(CoapExchangeexchange){// 设备读取温度exchange.respond(26.5 ℃);}OverridepublicvoidhandlePOST(CoapExchangeexchange){// 设备POST上报数据Stringdataexchange.getRequestText();System.out.println(设备上报data);exchange.respond(201,ok);}OverridepublicvoidhandlePUT(CoapExchangeexchange){Stringcfgexchange.getRequestText();System.out.println(下发配置cfg);exchange.respond(update success);}};CoapResourcesensorRootnewCoapResource(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());});2DTLS 加密 coaps:// 安全传输// coaps 加密地址需加载证书CoapClientsecureClientnewCoapClient(coaps://127.0.0.1:5684/device);3块传输大数据分包CoAP块1/块2Californium 默认自动分片无需手动处理。二、轻量 coap-java简单测试场景MavendependencygroupIdcom.github.svetleishaya/groupIdartifactIdcoap-java/artifactIdversion1.4.0/version/dependency示例极简但不支持DTLS、Observe、工业扩展仅学习用不推荐生产。三、CoAP 与 MQTT 区别物联网选型特性CoAPMQTT传输层UDPTCP头部大小极小4B起较大安全DTLSTLS适用低功耗单片机、电池设备网关、云端、大量长连接设备交互模型请求响应REST风格发布订阅四、常见踩坑点端口CoAP 默认5683加密 coaps5684防火墙开放UDPUDP 丢包CoAP 自带重传但弱网建议增加超时client.setTimeout(3000);数据包过大开启块传输Californium 自动处理设备DTLS证书使用scandium生成密钥对一机一密五、SpringBoot 集成 CoAP 扩展如果是 SpringBoot 项目可封装工具类全局单例 CoapClient 池避免频繁创建销毁统一异常拦截、消息日志DTLS 证书配置读取yml