Eclipse的californium之GET 章節(jié)三

經(jīng)過上一章的簡(jiǎn)單Helloword,相信很多讀者都看出來了,上面的案例就是一個(gè)簡(jiǎn)單的Get請(qǐng)求,請(qǐng)求方式甚至是和Http協(xié)議的get請(qǐng)求方式如出一轍。而這里又多做了get請(qǐng)求的介紹似乎有點(diǎn)畫蛇添足的感覺。非也!這一章的重點(diǎn)不會(huì)過多的介紹get的請(qǐng)求實(shí)現(xiàn),而是整體介紹一下coap請(qǐng)求的幾種請(qǐng)求方式的實(shí)現(xiàn)。

californium coap依賴包介紹:


核心jar包截圖

如上圖,依賴的jar包主要是?

1:californium-core? ? ? ? ? ?coap依賴工具的核心jar包

2-element-connector? ? ? ? ?UDP鏈接實(shí)現(xiàn)jar包

3-scandium? ? ? ? ? ? ? ? ? ? ? ? ? dtls coap協(xié)議的安全機(jī)制實(shí)現(xiàn)就像https,coap也有coaps實(shí)現(xiàn)

californium-core就像spring framework框架一樣也是會(huì)有spring-core在核心jar包封裝了我們常用的框架的設(shè)計(jì)模式,以及諸如等實(shí)現(xiàn)方式。同理element-connector ,就像jdbc的鏈接一樣只不過他的實(shí)現(xiàn)并不是對(duì)數(shù)據(jù)庫(kù)的鏈接,而是http協(xié)議的實(shí)現(xiàn)。而element-connector是對(duì)UDP協(xié)議的實(shí)現(xiàn)。

由于Http協(xié)議的開銷很大,因?yàn)閔ttp協(xié)議添加了對(duì)數(shù)據(jù)的健壯性,以及報(bào)文的順序性,所以在物聯(lián)網(wǎng)應(yīng)用場(chǎng)景單個(gè)設(shè)備板子 buffer并不是很大,而且網(wǎng)絡(luò)帶寬也還是在3G,4G的狀態(tài),不可能對(duì)網(wǎng)絡(luò)環(huán)境進(jìn)行更高速率的網(wǎng)絡(luò)傳輸。而UDP相對(duì)于TCP在物聯(lián)網(wǎng)環(huán)境下優(yōu)勢(shì)就很明顯。


Coap協(xié)議UDP鏈接實(shí)現(xiàn)類

如圖所示,coap協(xié)議是基于UDP的網(wǎng)絡(luò)協(xié)議。該類的介紹會(huì)在后面異議的簡(jiǎn)介。

至此我們先來實(shí)現(xiàn)GET請(qǐng)求。

1-Client代碼實(shí)現(xiàn):

package com.zhai.coap.demon02_GET;

import org.eclipse.californium.core.CoapClient;

import org.eclipse.californium.core.coap.Request;

public class DemonClient02 {

public static void main(String[] args) {

createCoapGet();

}

public static void createCoapGet() {

final CoapClient client = new CoapClient("coap://localhost:5683/get_client");

Request request = Request.newGet();

request.setPayload("Hello I am Client. i = "+1);

/**

* @see 設(shè)置udp為相應(yīng)方式

*/

client.useCONs();

client.useExecutor();

client.advanced(new DemonHandler02(), request);

}

}

2-ClientHandler代碼實(shí)現(xiàn)

package com.zhai.coap.demon02_GET;

import org.eclipse.californium.core.CoapHandler;

import org.eclipse.californium.core.CoapResponse;

public class DemonHandler02? implements CoapHandler {

public void onLoad(CoapResponse response) {

String conte = response.getResponseText();

System.out.println(conte);

}

public void onError() {

System.err.println("Client Error");

}

}

3-server端代碼實(shí)現(xiàn):

package com.zhai.coap.demon02_GET;

import org.eclipse.californium.core.CoapServer;

import org.eclipse.californium.core.network.CoapEndpoint;

public class DemonServer02 {

public static void main(String[] args) {

CoapServer server = new CoapServer();

CoapEndpoint endpoint = new CoapEndpoint(5683);

server.addEndpoint(endpoint);

server.add(new DemonResource02("get_client"));

server.start();

}

}

4-serverResource代碼實(shí)現(xiàn)

package com.zhai.coap.demon02_GET;

import org.eclipse.californium.core.CoapResource;

import org.eclipse.californium.core.server.resources.CoapExchange;

public class DemonResource02 extends CoapResource{

public DemonResource02(String name) {

super(name);

}

@Override

public void handleGET(CoapExchange exchange) {

String clientContent = exchange.getRequestText();

System.out.println(clientContent);

exchange.respond("Hello I am Server, " + clientContent);

}

}


代碼實(shí)現(xiàn)介紹:

Request request = Request.newGet();

創(chuàng)建一個(gè)Request GET請(qǐng)求方式,查看源碼:



Reuqest源碼截圖

如上所示Request的構(gòu)造方法設(shè)置了請(qǐng)求的響應(yīng)方式


請(qǐng)求方式的響應(yīng)以Code為準(zhǔn)

Code源碼查看:


code源碼截圖

這是一個(gè)定義在內(nèi)部的實(shí)現(xiàn)類實(shí)現(xiàn)了請(qǐng)求的響應(yīng)方式。GET,POST,PUT,DELETE

request.setPayload("Hello I am Client. i = "+1);

在請(qǐng)求的pyload中設(shè)置響應(yīng)發(fā)送到Server端的數(shù)據(jù)。

client.useCONs();? ? ? ? ? ? ? ? ? ? ? ? ?設(shè)置請(qǐng)求為需要server端相應(yīng)確認(rèn)方式

client.useExecutor();? ? ? ? ? ? ? ? ? ?設(shè)置請(qǐng)求響應(yīng)后臺(tái)創(chuàng)建線程等待確認(rèn)

client.advanced(new DemonHandler02(), request);? ? ?設(shè)置請(qǐng)求自定義處理程序,在handler有兩個(gè)實(shí)現(xiàn)方法。

public void onLoad(CoapResponse response) {}

public void onError() {}

兩個(gè)方法顧名思義。onload是對(duì)收到的響應(yīng)數(shù)據(jù)進(jìn)一步做處理,可以保存到數(shù)據(jù)庫(kù),也可以發(fā)送到指定的位置。

而onError方法。主要是針對(duì)異常的一些處理。

下一章會(huì)單獨(dú)講解一下關(guān)于?client.useExecutor();? ?該方法的介紹,主要是針對(duì)coap client的多線程處理機(jī)制的實(shí)現(xiàn),以及后臺(tái)服務(wù)的優(yōu)化。

至此小編已經(jīng)連續(xù)的寫了三篇關(guān)于coap的文章了,如果大家覺得有意義,幫我點(diǎn)個(gè)贊,再走吧,鼓勵(lì)一下小編繼續(xù)將文檔補(bǔ)充下去。如果大家有什么問題歡迎到評(píng)論區(qū)留言。謝謝大家。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容