中億物聯網卡大講堂:Socket物聯接入使用詳解
中億物聯網卡大講堂:本文介紹了socket物聯通信如何進行HTTP協議配置、字符串解析、接口定義與使用,更好的讓物聯網行業開發者了解Socket物聯的原理和代碼實現。
一、需求
目(mu)前,講(jiang)解物聯(lian)僅支持HTTP請求以(yi)及特(te)定(ding)的(de)燈控接口,相關(guan)文檔《超級后臺配(pei)置(zhi)物聯(lian)接口》以(yi)前在(zai)(zai)worktitle提交過。部分(fen)公司希望物聯(lian)能夠支持socket通(tong)信(xin),通(tong)過socket通(tong)信(xin)控制(zhi)設備(bei)開關(guan)實現(xian)物聯(lian),如講(jiang)解過程中正在(zai)(zai)講(jiang)解某個素材(cai)的(de)時(shi)候可(ke)以(yi)控制(zhi)視頻的(de)播(bo)放。
二、實現步驟
1、在超級后(hou)臺講解(jie)的(de)素材中配置物聯接(jie)口(格式下(xia)邊介紹)
2、在講(jiang)解(jie)APP中,通過HTTP協議(yi)獲(huo)得到配置(zhi)好(hao)的(de)物聯接口(kou)(kou),把該物聯接口(kou)(kou)解(jie)析成我(wo)們可用的(de)字符串
3、通(tong)(tong)過socket發送命令到(dao)服(fu)務端(duan),完成通(tong)(tong)信。
三、接口格式定義及使用
1、物聯接口(kou)格式定(ding)義:socket#協(xie)議#ip#端口(kou)號#命令
socket:物(wu)(wu)聯(lian)接口(kou)標(biao)識,表(biao)示(shi)該物(wu)(wu)聯(lian)接口(kou)是socket協(xie)議的
協議(yi):物聯接口中socket協議(yi),分為UDP、TCP
端口(kou)號:物聯接(jie)口(kou)中socket所需的(de)端口(kou)號
命令:物聯(lian)接口(kou)中socket在客戶端發送給服務端的具體命令
示例:socket#tcp#192.168.1.180#15000#1B43DD0D0A6C0080
2、使用:在講(jiang)解素材中的(de)物聯(lian)接(jie)口處直(zhi)接(jie)填入以上格式的(de)物聯(lian)接(jie)口即可
四、Socket通信原理及代碼實現
Socket通(tong)信(xin)(xin)是(shi)為網(wang)絡服(fu)務提供的一種機(ji)制,通(tong)信(xin)(xin)的兩端都有Socket,網(wang)絡通(tong)信(xin)(xin)其實就是(shi)Socket間(jian)的通(tong)信(xin)(xin),數據(ju)在兩個Socket間(jian)通(tong)過IO傳輸。
1、基于(yu)UDP協議(yi)的socket通信
直接操(cao)作(zuo)UDP不(bu)可能,應該將(jiang)(jiang)UDP封裝(zhuang)成(cheng)(cheng)對象(xiang)(xiang)DatagramSocket,封裝(zhuang)了UDP傳輸協(xie)議的socket對象(xiang)(xiang)。因為數(shu)(shu)據包(bao)中包(bao)含的信(xin)(xin)息(xi)較多(duo),為了操(cao)作(zuo)這些信(xin)(xin)息(xi)方(fang)(fang)便,也一樣(yang)會將(jiang)(jiang)其(qi)封裝(zhuang)成(cheng)(cheng)對象(xiang)(xiang)DatagramPacket,通過這個對象(xiang)(xiang)中的方(fang)(fang)法,就可以獲(huo)取(qu)到數(shu)(shu)據包(bao)中的各種信(xin)(xin)息(xi)。
DatagramSocket具備發(fa)送(song)和接(jie)受功(gong)能,在進行(xing)udp傳輸時,需要明確一個是(shi)發(fa)送(song)端,一個是(shi)接(jie)收端。
下邊的(de)代碼(ma)是(shi)發送(song)端(duan)實例:
//1.定義服務(wu)器的地址、端口(kou)號、數據(ju)
InetAddress address = InetAddress.getByName("192.168.1.253");
//InetAddress address_test=InetAddress.getLocalHost();
int port = 8234;
byte[] data = "北京(jing)云跡UDP測試".getBytes();
//2.創建(jian)數據報,包(bao)含(han)發送的數據信(xin)息(xi)
DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
//3.創建DatagramSocket對象
DatagramSocket socket = new DatagramSocket();
//4.向服務(wu)器端(duan)發(fa)送數據(ju)報
socket.send(packet);
//5.關(guan)閉socket
socket.close();
}
2、基于(yu)TCP協議的socket通信(xin)
兩個端點的建立連接后會有(you)一(yi)個傳輸數據的通(tong)道,這通(tong)道稱為流(liu)(liu),而(er)且(qie)是(shi)建立在網絡基礎(chu)上的流(liu)(liu),稱之為socket流(liu)(liu)。該流(liu)(liu)中既有(you)讀(du)取,也有(you)寫入(ru)。
tcp的兩個端點:
客(ke)戶端(duan):對應的對象,Socket
服務端(duan):對(dui)應的對(dui)象,ServerSocket
public void sendData() throws Exception {
//1、建(jian)立tcp的socket服務,最好(hao)明確(que)具(ju)體(ti)的地址和(he)端口(kou)。這個(ge)對象在創(chuang)建(jian)時,就已(yi)經可以對指(zhi)定ip和(he)端口(kou)進行連接(三(san)次握(wo)手)。
Socket socket = new Socket("10.1.31.69", 10002);
//2、如果連接成功,就(jiu)(jiu)意味(wei)著(zhu)通道建立了(le)(le),socket流(liu)就(jiu)(jiu)已經(jing)產生了(le)(le)。只(zhi)要(yao)獲取到socket流(liu)中的(de)讀取流(liu)和(he)寫入流(liu)即可,只(zhi)要(yao)通過getInputStream和(he)getOutputStream就(jiu)(jiu)可以獲取兩個流(liu)對(dui)象。
OutputStream outputStream = socket.getOutputStream();//獲(huo)取(qu)了socket流(liu)中的輸出流(liu)對象。
outputStream.write("tcp協議通信".getBytes());
//3、關閉資源。
socket.close();
中億物聯網,作為成熟的物聯網解決方案提供商,提醒對投資物聯卡代理、企業物聯卡購買有興趣的小伙伴在選擇移動物聯卡、電信物聯卡、聯通物聯卡供應商的時候,一定要選擇資質齊全,售前售后服務完善,物聯卡管理平臺穩定的物聯網服務商。
還有這些物(wu)聯卡(ka)相關(guan)資(zi)訊您(nin)肯定(ding)想知(zhi)道:關(guan)于(yu)物(wu)聯卡(ka)如何續(xu)費?企業辦理物(wu)聯卡(ka)需要注(zhu)意哪些事(shi)項!物(wu)聯網(wang)卡(ka)的應用(yong)場景有哪些?請關(guan)注(zhu)“物(wu)聯無(wu)疆”公眾號,回復(fu)關(guan)鍵詞(ci)“物(wu)聯卡(ka)”即可查看!