1. 程式人生 > >基於CoAP協議客戶端/服務端的demo(Java版)

基於CoAP協議客戶端/服務端的demo(Java版)

概述:

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卷》