經(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包主要是?
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的網(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)求方式,查看源碼:

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

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ū)留言。謝謝大家。