中億物聯(lián)網(wǎng)卡大講堂:本文介紹了socket物聯(lián)通信如何進行HTTP協(xié)議配置、字符串解析、接口定義與使用,更好的讓物聯(lián)網(wǎng)行業(yè)開發(fā)者了解Socket物聯(lián)的原理和代碼實現(xiàn)。
一、需求
目前,講解物聯(lián)僅支持HTTP請求以及特定的燈控接口,相關(guān)文檔《超級后臺配置物聯(lián)接口》以前在worktitle提交過。部分公司希望物聯(lián)能夠支持socket通信,通過socket通信控制設(shè)備開關(guān)實現(xiàn)物聯(lián),如講解過程中正在講解某個素材的時候可以控制視頻的播放。
二、實現(xiàn)步驟
1、在超級后臺講解的素材中配置物聯(lián)接口(格式下邊介紹)
2、在講解APP中,通過HTTP協(xié)議獲得到配置好的物聯(lián)接口,把該物聯(lián)接口解析成我們可用的字符串
3、通過socket發(fā)送命令到服務(wù)端,完成通信。
三、接口格式定義及使用
1、物聯(lián)接口格式定義:socket#協(xié)議#ip#端口號#命令
socket:物聯(lián)接口標(biāo)識,表示該物聯(lián)接口是socket協(xié)議的
協(xié)議:物聯(lián)接口中socket協(xié)議,分為UDP、TCP
端口號:物聯(lián)接口中socket所需的端口號
命令:物聯(lián)接口中socket在客戶端發(fā)送給服務(wù)端的具體命令
示例:socket#tcp#192.168.1.180#15000#1B43DD0D0A6C0080
2、使用:在講解素材中的物聯(lián)接口處直接填入以上格式的物聯(lián)接口即可
四、Socket通信原理及代碼實現(xiàn)
Socket通信是為網(wǎng)絡(luò)服務(wù)提供的一種機制,通信的兩端都有Socket,網(wǎng)絡(luò)通信其實就是Socket間的通信,數(shù)據(jù)在兩個Socket間通過IO傳輸。
1、基于UDP協(xié)議的socket通信
直接操作UDP不可能,應(yīng)該將UDP封裝成對象DatagramSocket,封裝了UDP傳輸協(xié)議的socket對象。因為數(shù)據(jù)包中包含的信息較多,為了操作這些信息方便,也一樣會將其封裝成對象DatagramPacket,通過這個對象中的方法,就可以獲取到數(shù)據(jù)包中的各種信息。
DatagramSocket具備發(fā)送和接受功能,在進行udp傳輸時,需要明確一個是發(fā)送端,一個是接收端。
下邊的代碼是發(fā)送端實例:
public void sendDataByUDP() throws IOException {
//1.定義服務(wù)器的地址、端口號、數(shù)據(jù)
InetAddress address = InetAddress.getByName("192.168.1.253");
//InetAddress address_test=InetAddress.getLocalHost();
int port = 8234;
byte[] data = "北京云跡UDP測試".getBytes();
//2.創(chuàng)建數(shù)據(jù)報,包含發(fā)送的數(shù)據(jù)信息
DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
//3.創(chuàng)建DatagramSocket對象
DatagramSocket socket = new DatagramSocket();
//4.向服務(wù)器端發(fā)送數(shù)據(jù)報
socket.send(packet);
//5.關(guān)閉socket
socket.close();
}
2、基于TCP協(xié)議的socket通信
兩個端點的建立連接后會有一個傳輸數(shù)據(jù)的通道,這通道稱為流,而且是建立在網(wǎng)絡(luò)基礎(chǔ)上的流,稱之為socket流。該流中既有讀取,也有寫入。
tcp的兩個端點:
客戶端:對應(yīng)的對象,Socket
服務(wù)端:對應(yīng)的對象,ServerSocket
public void sendData() throws Exception {
//1、建立tcp的socket服務(wù),最好明確具體的地址和端口。這個對象在創(chuàng)建時,就已經(jīng)可以對指定ip和端口進行連接(三次握手)。
Socket socket = new Socket("10.1.31.69", 10002);
//2、如果連接成功,就意味著通道建立了,socket流就已經(jīng)產(chǎn)生了。只要獲取到socket流中的讀取流和寫入流即可,只要通過getInputStream和getOutputStream就可以獲取兩個流對象。
OutputStream outputStream = socket.getOutputStream();//獲取了socket流中的輸出流對象。
outputStream.write("tcp協(xié)議通信".getBytes());
//3、關(guān)閉資源。
socket.close();
}
中億物聯(lián)網(wǎng),作為成熟的物聯(lián)網(wǎng)解決方案提供商,提醒對投資物聯(lián)卡代理、企業(yè)物聯(lián)卡購買有興趣的小伙伴在選擇移動物聯(lián)卡、電信物聯(lián)卡、聯(lián)通物聯(lián)卡供應(yīng)商的時候,一定要選擇資質(zhì)齊全,售前售后服務(wù)完善,物聯(lián)卡管理平臺穩(wěn)定的物聯(lián)網(wǎng)服務(wù)商。
還有這些物聯(lián)卡相關(guān)資訊您肯定想知道:關(guān)于物聯(lián)卡如何續(xù)費?企業(yè)辦理物聯(lián)卡需要注意哪些事項!物聯(lián)網(wǎng)卡的應(yīng)用場景有哪些?請關(guān)注“物聯(lián)無疆”公眾號,回復(fù)關(guān)鍵詞“物聯(lián)卡”即可查看!