2014-09-05 10:31:49
來源:中國數字視聽網
主要功能需求分析和模型構建
對于網絡直連,硬件如圖1所示,用網絡直連線將PC機和顯示屏連接起來,然后手動設置它們的IP地址在同一個網段,即可進行通信了。
但采用這種方式,如果事先不知道顯示屏的IP地址,將很難進行通信。為了達到不知道顯示屏IP地址也能實現PC機與顯示屏直連通信的目的,可借助DHCP服務原理來解決:即設置LED顯示屏為某固定IP地址的DHCP服務器,設置PC機網卡為自動獲取IP地址的方式,通過DHCP服務功能,自動配置PC機的網卡IP地址,這樣網絡連接通道就建立了。
有些開發商就采用這種方式實現了網絡直連,但這種方法存在一些問題:其一,由于UDP通信為不連接通信,其通信可靠性要差一些,容易失敗;其二,只能通過操作系統自帶的系統完成,沒有干預,用戶不能設置超時,有時等待時間太長,最長為60秒;其三,DHCP為固定IP方式,在實際應用中顯然不太好;其四,退出系統時,不能恢復PC機原有的網卡配置信息。
基于此,經過研究,本文提出一種新的網絡直連方法,可以實現網絡直連、自動獲取IP地址以及實現PC機網卡配置信息保存和恢復等功能,克服當前實現方法的不足,提高可靠性、穩定性和時效性等各方面性能,其系統模型如圖2所示,主要功能和工作流程如下:
(1)啟動系統時,檢索、訪問PC機的所有網卡,并保存其網卡配置信息,供退出系統時恢復;(2)啟動網絡直連進程;(3)廣播IP地址請求數據包;(4)返回IP地址數據包;(5)解包,獲取PC機和LED顯示屏的IP地址,設置PC機的IP地址;(6)返回LED顯示屏的IP地址,關閉網絡直連,完成通信通道的建立;(7)建立PC機和LED顯示屏的通信通道后,即可對顯示屏進行讀/寫參數、發送節目、開關屏等通信控制操作;(8)退出系統時,根據(1)保存的網卡配置信息,恢復PC機網卡的原始狀態。
在以上流程中,(2)~(6)是核心過程,它模擬DHCP服務,實現PC機廣播請求IP地址,獲取PC機IP地址并設置,上傳LED顯示屏IP地址,完成網絡直連通道的建立,是進行網絡直連操作時必做的步驟;(1)和(8)是啟動和退出系統時所做的保存PC機網卡配置信息和恢復網卡配置信息操作;(7)是在完成網絡直連通道后進行的顯示屏控制的一般操作。本文重點介紹前兩者。
關鍵功能的設計和實現
2.1保存PC機網卡配置信息
用來調試顯示屏的PC機,一般是一機多用,在調試顯示屏的同時,還用來辦公、上網,其網卡IP地址可能是固定的或自動獲取的。在做網絡直連時,可能會改變其IP地址,為了不影響用戶的工作,退出時需要自動恢復其IP地址。而要做到這一點,可在啟動LED控制軟件時,讀取當前網卡配置信息,如IP地址、網卡名、MAC地址、網卡類型、是否是自動配置IP地址等等,將這些信息放入一個鏈表中保存,同時設置一個標識,記錄用戶在調試顯示屏的過程中,是否使用過網絡直連操作,待退出系統時使用。
在Windows操作系統中,可使用IPHelper接口來讀取網卡信息,它是一套用于管理本地網絡設置的API,通過它使用IP_ADAPTER_INFO結構,可以方便地提取上述網卡配置信息,保存到鏈表中。
2.2借鑒DHCP服務原理,構建網絡直連通道
要實現PC機和LED顯示屏網絡直連通信,必須解決兩個關鍵問題:其一,讓PC機和LED顯示屏在同一個網段;其二,知道LED顯示屏的IP地址。
除此之外,還要解決多網卡、無線網卡對網絡直連的干擾等現象。借鑒DHCP原理,主要解決思路如下:
(1)在PC機端設計一個網絡直連控制進程;(2)需要網絡直連時,啟動該進程,通過Windows相關網絡API函數和注冊表信息,確定與LED顯示屏連接的非無線網卡,將其MAC地址放入構建請求IP地址的UDP數據包中,然后廣播出去,同時啟動內部UDP包捕獲子進程;(3)LED顯示屏收到請求IP地址的UDP包后,根據本身IP地址,構造一個PC機的IP地址,將其廣播出去,為了不引起混亂,這里構建的是偽DHCP包,正常的Windows客戶端收到該UDP包時,并不會自動改變其IP地址;(4)網絡直連控制進程的UDP包捕獲子進程接收到分配的IP地址的UDP包后,解包得到PC機的IP地址和LED顯示屏的IP地址;(5)設置PC機網卡IP地址,上傳LED顯示屏的IP地址給控制軟件,成功后,關閉網絡直連控制進程,完成網絡直連通道的建立。
這個網絡直連的過程涉及三個系統:(1)網絡直連控制進程,它構建請求IP地址UDP數據包并廣播出去,同時監控目標網卡的68端口,捕獲返回的UDP數據包,解析出PC機的IP地址和LED顯示屏的IP地址,然后設置PC機的IP地址,將LED顯示屏的IP地址提交給主進程,完成網絡直連的任務;(2)LED顯示屏DHCP服務子進程,它接收PC機的IP地址請求,構建并設置自身IP地址,并返回PC機的IP地址的偽DHCP包;(3)LED控制軟件,當用戶選擇網絡直連方式時,啟動網絡直連控制子進程,實現網絡直接通道的建立,完成后,關閉該進程。
2.3恢復PC機網卡的配置信息
退出系統時,根據2.1保存的是否使用過網絡直連的標識進行判斷,如果沒有使用過網絡直連方式,則無需執行網絡IP恢復功能;否則將執行恢復功能,還原2.1保存的網卡配置,恢復網卡IP地址可使用netshinterfaceipset命令。
同時,為了加快處理速度并提高成功率,可按禁用網卡、設置網卡IP地址、再啟用網卡的步驟實施:
(1)使用Windows的SetupAPI相關接口API函數禁用目標網卡;(2)恢復目標網卡IP設置,根據靜態IP地址和動態IP地址,分別用不同的命令:
a.恢復靜態IP地址命令。
netshinterfaceipsetaddressname=“本地連接”
source=STaticaddr=192.168.1.19mask=255.
255.255.0gateway=none.
b.恢復動態IP地址命令。
netshinterfaceipsetaddress“本地連接”dhcp
(3)使用SetupAPI相關接口API函數啟用目標網卡,這樣就完成了網卡配置信息的恢復。
結論
本文針對LED顯示屏調試過程中對網絡直連的需求,提出一種網絡直連的方法,系統在啟動時自動保存網卡配置信息,使用網絡直連進程構建網絡直連通道,退出系統時自動恢復網卡配置信息,使用戶無需知道LED顯示屏的IP地址,也不用修改PC機的IP地址,便可實現PC機與LED顯示屏的網絡通信。該方法在LED導航者軟件中使用,其可靠性、穩定性和時效性得到了用戶的認可,取得了良好的效果。實踐證明,該方法可為類似的應用提供一種可供借鑒的解決方案。