廢話不多說(shuō),有圖有真相
- 由于筆者之前的wifi硬件沒(méi)有備份,離職之后被公司回收,所以這里我使用筆者的MAC電腦作為服務(wù)器,筆者的iPhone6S手機(jī)作為客戶端演示wifi通訊

1.1-Wifi通訊的定義
- 利用wifi信號(hào),是智能手機(jī)(iPhone)與硬件設(shè)備進(jìn)行通訊的方式,稱(chēng)之為Wift通訊
- 與HTTP不同的是,wifi通訊需要有智能硬件的參與,是屬于手機(jī)端與硬件端的通訊,而HTTP常用于手機(jī)端與后臺(tái)的通訊
1.2-Wift通訊的三種經(jīng)典場(chǎng)景
-
1.Wifi通訊必須要有兩個(gè)參與者
- (1)路由器:通常又指服務(wù)端,主要作用是提供wifi信號(hào)
- (2)硬件:通常又指客戶端,既可以代表我們的手機(jī)也可以代表硬件設(shè)備,通訊雙方的數(shù)據(jù)發(fā)送者
- wifi通訊的本質(zhì)就是由服務(wù)器負(fù)責(zé)轉(zhuǎn)發(fā)客戶端的消息數(shù)據(jù)
-
2.根據(jù)wifi智能家居的使用場(chǎng)景,wifi通訊主要有以下三種情況
- (1)手機(jī)直接與外部設(shè)備建立連接,這種情況需要外部設(shè)備內(nèi)部有wifi信號(hào)發(fā)射器。 例如極路客行車(chē)記錄儀,只有攝像頭沒(méi)有播放器(特點(diǎn)是極其小巧),記錄儀無(wú)法直接看到錄制的影像,要想看到需要手機(jī)連接行車(chē)記錄儀的wifi(建立局域網(wǎng)),然后從記錄儀中拷貝視頻到手機(jī)中播放。
- (2)手機(jī)連接路由器,外部設(shè)備連接路由器,然后建立連接。這種情況比較常見(jiàn),例如家用wifi版空氣凈化器,能夠連接家庭wifi,然后如果手機(jī)也連接的是同一wifi就可以通過(guò)APP控制設(shè)備(數(shù)據(jù)發(fā)送)
- (3)云端wifi通訊。這種wifi通訊場(chǎng)景是未來(lái)的大趨勢(shì),(目前最火的就是膜拜,嚴(yán)格來(lái)說(shuō)這不能叫wift通訊,因?yàn)槭謾C(jī)4G網(wǎng)絡(luò)也可以,只是這種云端wifi通訊架構(gòu)與膜拜單車(chē)解鎖原理很接近。 手機(jī)掃一掃將自行車(chē)信息發(fā)送到后臺(tái)服務(wù)器,然后后臺(tái)服務(wù)器發(fā)給膜拜單車(chē)路由器,進(jìn)而控制單車(chē)解鎖。) 其實(shí)在另一個(gè)家用領(lǐng)域也已經(jīng)開(kāi)始了這種云端wift通訊的研發(fā)了,詳情可見(jiàn)下圖
-
第一種:手機(jī)-外部設(shè)備
- 這種方式的特點(diǎn)就是將路由器內(nèi)置在外部設(shè)備中,外部設(shè)備既充當(dāng)了服務(wù)器又充當(dāng)了客戶端,優(yōu)點(diǎn)就是省去了外部路由器簡(jiǎn)化了通訊過(guò)程

- 第二種:手機(jī)-路由器-外部設(shè)備
- 這種方式比較傳統(tǒng),主要借助家居路由器來(lái)降低硬件的成本

- 第三種:手機(jī)(客戶端)-云端(遠(yuǎn)程服務(wù)器)-路由器(本地服務(wù)端)-外部設(shè)備(客戶端)
- 這種方式最大的好處就是解決了前面兩種手機(jī)和設(shè)備必須要連接同一路由器的情況,極大的提高了wifi通訊的便利性,也是未來(lái)的趨勢(shì)
- 想象一下,你提前把米洗好放進(jìn)電飯煲,下班時(shí),點(diǎn)擊APP開(kāi)時(shí)煮飯,回到家時(shí),飯已經(jīng)煮好。如果電飯煲內(nèi)置了網(wǎng)絡(luò)芯片是完全可以實(shí)現(xiàn)了,其實(shí)膜拜就是這樣遠(yuǎn)程解鎖的
- 這種方式最大的好處就是解決了前面兩種手機(jī)和設(shè)備必須要連接同一路由器的情況,極大的提高了wifi通訊的便利性,也是未來(lái)的趨勢(shì)

1.3-Wifi通訊流程
通過(guò)上圖可以看出,一個(gè)完整的wifi通訊的步驟大概如下:
1.服務(wù)端連接監(jiān)聽(tīng)網(wǎng)絡(luò)
2.客戶端連接服務(wù)端
-
3.客戶端發(fā)送數(shù)據(jù),服務(wù)端接收到數(shù)據(jù)之后將數(shù)據(jù)轉(zhuǎn)發(fā)給其他客戶端,就實(shí)現(xiàn)了客戶端與客戶端的通訊
- 客戶端與客戶端是不能直接建立網(wǎng)絡(luò)的,必須要通過(guò)服務(wù)器。可以聯(lián)想一下,如果沒(méi)有后臺(tái),你的APP還能給其他用戶發(fā)數(shù)據(jù)么?所有的數(shù)據(jù)都是后臺(tái)幫助我們轉(zhuǎn)發(fā)的
1.4-wifi通訊原理
-
wifi通訊的原理就是使用Socket(套接字)進(jìn)行UDP(一對(duì)多)通訊
- HTTP的底層就是Socket,也就是說(shuō)wifi通訊的網(wǎng)絡(luò)協(xié)議比傳統(tǒng)的HTTP更加的底層
Socket的英文原義是“孔”或“插座”。作為BSD UNIX的進(jìn)程通信機(jī)制,取后一種意思。通常也稱(chēng)作"套接字",用于描述IP地址和端口,是一個(gè)通信鏈的句柄,可以用來(lái)實(shí)現(xiàn)不同虛擬機(jī)或不同計(jì)算機(jī)之間的通信。在Internet上的主機(jī)一般運(yùn)行了多個(gè)服務(wù)軟件,同時(shí)提供幾種服務(wù)。每種服務(wù)都打開(kāi)一個(gè)Socket,并綁定到一個(gè)端口上,不同的端口對(duì)應(yīng)于不同的服務(wù)。Socket正如其英文原意那樣,像一個(gè)多孔插座。一臺(tái)主機(jī)猶如布滿各種插座的房間,每個(gè)插座有一個(gè)編號(hào),有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節(jié)目。 客戶軟件將插頭插到不同編號(hào)的插座,就可以得到不同的服務(wù)
-
Socket是一種通訊機(jī)制,用于描述IP地址和端口。IP地址用于找到你的電腦,端口號(hào)用于找到你這臺(tái)電腦上面的某一個(gè)應(yīng)用程序的某一個(gè)服務(wù)
- 可以理解為:Scoket = IP地址+端口號(hào)
-
Socket工作流程
- 根據(jù)連接啟動(dòng)的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過(guò)程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽(tīng),客戶端請(qǐng)求,連接確認(rèn)
- (1)服務(wù)器監(jiān)聽(tīng):是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)
- (2)客戶端請(qǐng)求:是指由客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求
*(3)連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽(tīng)到或者說(shuō)接收到客戶端套接字的連接請(qǐng)求,它就響應(yīng)客戶端套接字的請(qǐng)求,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽(tīng)狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求