Californium 是一款基于Java實現(xiàn)的Coap技術(shù)框架,該項目實現(xiàn)了Coap協(xié)議的各種請求響應(yīng)定義,支持CON/NON不同的可靠性傳輸模式。
10年積累的成都網(wǎng)站建設(shè)、做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先制作網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有銅官免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
GIT地址:
模塊說明
~.californium-core
californium 核心模塊,定義了一系列協(xié)議棧核心接口,并提供了Coap協(xié)議棧的完整實現(xiàn),
~.element-connector
從core模塊剝離的連接器模塊,用于抽象網(wǎng)絡(luò)傳輸層的接口,使得coap可以同時運(yùn)行于udp和tcp多種傳輸協(xié)議之上;
~.scandium-core
Coap over DTLS 支持模塊,提供了DTLS 傳輸?shù)腃onnector實現(xiàn);
~.californium-osgi
californium 的osgi 封裝模塊;
~.californium-proxy
coap 代理模塊,用于支持coap2coap、coap2http、http2coap的轉(zhuǎn)換;
~.demo-xxx
樣例程序;
其中,californium-core和element-connector是coap技術(shù)實現(xiàn)最關(guān)鍵的模塊,后面的分析將圍繞這兩個模塊進(jìn)行。
Californiium 定義了三層架構(gòu):
1 網(wǎng)絡(luò)層,負(fù)責(zé)處理端口監(jiān)聽,網(wǎng)絡(luò)數(shù)據(jù)收發(fā);
2 協(xié)議層,負(fù)責(zé)Coap協(xié)議數(shù)據(jù)包解析及封裝,實現(xiàn)消息的路由、可靠性傳輸、Token處理、觀察者模型等等;
3 邏輯層,負(fù)責(zé) Resource定義和映射,一個Resource 對應(yīng)一個URL,可獨立實現(xiàn)Coap 請求處理。
異步線程池
三層架構(gòu)中都可以支持獨立的線程池,其中網(wǎng)絡(luò)層與協(xié)議層的線程池保持獨立;
邏輯層可為每個Resource指定獨立的線程池,并支持父級繼承的機(jī)制,即當(dāng)前Resource若沒有定義則沿用父級Resource線程池;
若邏輯層未指定線程池,則默認(rèn)使用協(xié)議層的線程池。
GIT地址:
Coap是基于UDP的應(yīng)用層,但是Californium實現(xiàn)了coap udp和tcp兩種傳輸層協(xié)議,單次請求傳輸限制在1M以內(nèi)。
提供:GET、POST、PUT、DELETE四種請求類型。
Coap是基于二進(jìn)制的協(xié)議,header只有4個字節(jié),非常緊湊。
1、首先打開安卓javaleshan。
2、其次點擊右上角設(shè)置進(jìn)入到設(shè)置界面。
3、最后在設(shè)置界面找到服務(wù)器選擇,將onenetcoap服務(wù)器地址輸入,點擊連接即可。
你好:
strut+spring+hibnate
struts最近有不少人替換成spring mvc,hibernate可換成ibatis,已經(jīng)改名叫mybatis了
jsp+servlet+javaben適用于比較小的項目
Struts 【Java開源 Web框架】
IBATIS 【Java開源 持久層框架】
Hibernate 【Java開源 持久層框架】
1、新建一個java工程項目:右鍵Eclipse的PackageExplorer空白部分,點擊New,再點擊JavaProject,輸入工程名,點擊finish;
2、在新建的工程里新建一個類:右鍵工程,點擊New,再點擊Class,輸入類名,點擊finish;
3、把寫好的java文件的代碼復(fù)制到新建的類中;
4、右鍵新建的類文件,點擊RunAs,再點擊JavaApplication即可運(yùn)行Java文件。
需要注意的是:java文件要成功運(yùn)行,前提是要有主方法(main)的存在,沒有主方法沒辦法運(yùn)行java程序。
import?javax.tools.*;
import?java.io.*;
/**
*?@author?hardneedl
*/
final?public?class?MyCompile?{
/**
*?@param?args?命令行參數(shù)只有1個,即待編譯的源代碼文件的絕對路徑
*?@throws?FileNotFoundException
*/
public?static?void?main(String...?args)?throws?FileNotFoundException?{
JavaCompiler?compiler?=?ToolProvider.getSystemJavaCompiler();
int?r?=?compiler.run(null,null,null,args[0]);
System.out.println(r?==?0??"成功":"失敗");
}
}
public static void process() {
try {
Enumeration portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements())
{
CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)//如果端口類型是串口則判斷名稱
{
if(portId.getName().equals("COM1")){//如果是COM1端口則退出循環(huán)
break;
}else{
portId=null;
}
}
}
SerialPort serialPort = (SerialPort)portId.open("Serial_Communication", 1000);//打開串口的超時時間為1000ms
serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);//設(shè)置串口速率為9600,數(shù)據(jù)位8位,停止位1們,奇偶校驗無
InputStream in = serialPort.getInputStream();//得到輸入流
OutputStream out = serialPort.getOutputStream();//得到輸出流
//進(jìn)行輸入輸出操作
//操作結(jié)束后
in.close();
out.close();
serialPort.close();//關(guān)閉串口
} catch (PortInUseException e) {
e.printStackTrace();
} catch (UnsupportedCommOperationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}