關(guān)鍵功能的設(shè)計(jì)和實(shí)現(xiàn)
2.1保存PC機(jī)網(wǎng)卡配置信息
用來(lái)調(diào)試顯示屏的PC機(jī),一般是一機(jī)多用,在調(diào)試顯示屏的同時(shí),還用來(lái)辦公、上網(wǎng),其網(wǎng)卡IP地址可能是固定的或自動(dòng)獲取的。在做網(wǎng)絡(luò)直連時(shí),可能會(huì)改變其IP地址,為了不影響用戶的工作,退出時(shí)需要自動(dòng)恢復(fù)其IP地址。而要做到這一點(diǎn),可在啟動(dòng)LED控制軟件時(shí),讀取當(dāng)前網(wǎng)卡配置信息,如IP地址、網(wǎng)卡名、MAC地址、網(wǎng)卡類型、是否是自動(dòng)配置IP地址等等,將這些信息放入一個(gè)鏈表中保存,同時(shí)設(shè)置一個(gè)標(biāo)識(shí),記錄用戶在調(diào)試顯示屏的過(guò)程中,是否使用過(guò)網(wǎng)絡(luò)直連操作,待退出系統(tǒng)時(shí)使用。
在Windows操作系統(tǒng)中,可使用IPHelper接口來(lái)讀取網(wǎng)卡信息,它是一套用于管理本地網(wǎng)絡(luò)設(shè)置的API,通過(guò)它使用IP_ADAPTER_INFO結(jié)構(gòu),可以方便地提取上述網(wǎng)卡配置信息,保存到鏈表中。
2.2借鑒DHCP服務(wù)原理,構(gòu)建網(wǎng)絡(luò)直連通道
要實(shí)現(xiàn)PC機(jī)和LED顯示屏網(wǎng)絡(luò)直連通信,必須解決兩個(gè)關(guān)鍵問(wèn)題:其一,讓PC機(jī)和LED顯示屏在同一個(gè)網(wǎng)段;其二,知道LED顯示屏的IP地址。
除此之外,還要解決多網(wǎng)卡、無(wú)線網(wǎng)卡對(duì)網(wǎng)絡(luò)直連的干擾等現(xiàn)象。借鑒DHCP原理,主要解決思路如下:
(1)在PC機(jī)端設(shè)計(jì)一個(gè)網(wǎng)絡(luò)直連控制進(jìn)程;(2)需要網(wǎng)絡(luò)直連時(shí),啟動(dòng)該進(jìn)程,通過(guò)Windows相關(guān)網(wǎng)絡(luò)API函數(shù)和注冊(cè)表信息,確定與LED顯示屏連接的非無(wú)線網(wǎng)卡,將其MAC地址放入構(gòu)建請(qǐng)求IP地址的UDP數(shù)據(jù)包中,然后廣播出去,同時(shí)啟動(dòng)內(nèi)部UDP包捕獲子進(jìn)程;(3)LED顯示屏收到請(qǐng)求IP地址的UDP包后,根據(jù)本身IP地址,構(gòu)造一個(gè)PC機(jī)的IP地址,將其廣播出去,為了不引起混亂,這里構(gòu)建的是偽DHCP包,正常的Windows客戶端收到該UDP包時(shí),并不會(huì)自動(dòng)改變其IP地址;(4)網(wǎng)絡(luò)直連控制進(jìn)程的UDP包捕獲子進(jìn)程接收到分配的IP地址的UDP包后,解包得到PC機(jī)的IP地址和LED顯示屏的IP地址;(5)設(shè)置PC機(jī)網(wǎng)卡IP地址,上傳LED顯示屏的IP地址給控制軟件,成功后,關(guān)閉網(wǎng)絡(luò)直連控制進(jìn)程,完成網(wǎng)絡(luò)直連通道的建立。
這個(gè)網(wǎng)絡(luò)直連的過(guò)程涉及三個(gè)系統(tǒng):(1)網(wǎng)絡(luò)直連控制進(jìn)程,它構(gòu)建請(qǐng)求IP地址UDP數(shù)據(jù)包并廣播出去,同時(shí)監(jiān)控目標(biāo)網(wǎng)卡的68端口,捕獲返回的UDP數(shù)據(jù)包,解析出PC機(jī)的IP地址和LED顯示屏的IP地址,然后設(shè)置PC機(jī)的IP地址,將LED顯示屏的IP地址提交給主進(jìn)程,完成網(wǎng)絡(luò)直連的任務(wù);(2)LED顯示屏DHCP服務(wù)子進(jìn)程,它接收PC機(jī)的IP地址請(qǐng)求,構(gòu)建并設(shè)置自身IP地址,并返回PC機(jī)的IP地址的偽DHCP包;(3)LED控制軟件,當(dāng)用戶選擇網(wǎng)絡(luò)直連方式時(shí),啟動(dòng)網(wǎng)絡(luò)直連控制子進(jìn)程,實(shí)現(xiàn)網(wǎng)絡(luò)直接通道的建立,完成后,關(guān)閉該進(jìn)程。
2.3恢復(fù)PC機(jī)網(wǎng)卡的配置信息
退出系統(tǒng)時(shí),根據(jù)2.1保存的是否使用過(guò)網(wǎng)絡(luò)直連的標(biāo)識(shí)進(jìn)行判斷,如果沒(méi)有使用過(guò)網(wǎng)絡(luò)直連方式,則無(wú)需執(zhí)行網(wǎng)絡(luò)IP恢復(fù)功能;否則將執(zhí)行恢復(fù)功能,還原2.1保存的網(wǎng)卡配置,恢復(fù)網(wǎng)卡IP地址可使用netshinterfaceipset命令。
同時(shí),為了加快處理速度并提高成功率,可按禁用網(wǎng)卡、設(shè)置網(wǎng)卡IP地址、再啟用網(wǎng)卡的步驟實(shí)施:
(1)使用Windows的SetupAPI相關(guān)接口API函數(shù)禁用目標(biāo)網(wǎng)卡;(2)恢復(fù)目標(biāo)網(wǎng)卡IP設(shè)置,根據(jù)靜態(tài)IP地址和動(dòng)態(tài)IP地址,分別用不同的命令:
a.恢復(fù)靜態(tài)IP地址命令。
netshinterfaceipsetaddressname=“本地連接”
source=STaticaddr=192.168.1.19mask=255.
255.255.0gateway=none.
b.恢復(fù)動(dòng)態(tài)IP地址命令。
netshinterfaceipsetaddress“本地連接”dhcp
(3)使用SetupAPI相關(guān)接口API函數(shù)啟用目標(biāo)網(wǎng)卡,這樣就完成了網(wǎng)卡配置信息的恢復(fù)。
結(jié)論
本文針對(duì)LED顯示屏調(diào)試過(guò)程中對(duì)網(wǎng)絡(luò)直連的需求,提出一種網(wǎng)絡(luò)直連的方法,系統(tǒng)在啟動(dòng)時(shí)自動(dòng)保存網(wǎng)卡配置信息,使用網(wǎng)絡(luò)直連進(jìn)程構(gòu)建網(wǎng)絡(luò)直連通道,退出系統(tǒng)時(shí)自動(dòng)恢復(fù)網(wǎng)卡配置信息,使用戶無(wú)需知道LED顯示屏的IP地址,也不用修改PC機(jī)的IP地址,便可實(shí)現(xiàn)PC機(jī)與LED顯示屏的網(wǎng)絡(luò)通信。該方法在LED導(dǎo)航者軟件中使用,其可靠性、穩(wěn)定性和時(shí)效性得到了用戶的認(rèn)可,取得了良好的效果。實(shí)踐證明,該方法可為類似的應(yīng)用提供一種可供借鑒的解決方案。