• 沒有找到結果。

無線網路偵測實作

第三章 實作及相關問題探討

3.2 無線網路偵測實作

根據第二章提到的連線轉移策略,在 CW 中需要做到三項網路偵 測動作:

‹ 偵測 WLAN 目前可不可以使用:

偵測的方法為根據目前環境的無線訊號強度來判斷,在 IEEE 802.11b 標準中將無線訊號強度的範圍規定在 -20dbm 到 -100dbm 之間,-20dbm 為最好; -100dbm 為最差[10]。在 TCP 連線已經建立的時後,並非訊號低到-100dbm 才會影 響資料傳送,根據實驗發現訊號小於-81dbm 之後封包就無 法傳算出去了。所以判定 WLAN 是否可以使用的根據為:

若是目前訊號強度從高掉到低於 -81dbm 就判定 WLAN 目 前不可以使用;若是目前訊號強度從低升到高於 -70dbm 就 判定 WLAN 可以使用,使用這種高水位跟低水位的判定方 法 可 以 讓 系 統 不 會 因 為 訊 號 強 度 小 幅 震 盪 而 疲 於 轉 換 WLAN 和 GPRS,判斷示意圖如圖 3-2:

-100 -81 -70 -20

OFF ON

ON OFF

WLAN Signal Strength (dbm)

圖 3-2 WLAN 判定圖

‹ 當正在使用 WLAN 時,偵測 WLAN IP 有沒有改變:

偵測的方法很直觀,就是定期去掃描 WLAN 使用的 IP 看 看有沒有改變。

‹ 偵測目前 GPRS 可不可以使用:

偵測的方法為定期掃描 GPRS 使用的 IP,如果有掃描到代

表可以使用,反之不可以使用。

綜合上述的判斷條件,在 CW 中需要實做三件事情:

‹ 取得目前 WLAN 訊號強度

‹ 取得 WLAN 使用的 IP

‹ 取得 GPRS 使用的 IP

Embedded Visual C++透過以下兩種方式可以做到這三件事情 [3]:

‹ 利用 EVC++提供的函式庫 “IP Helper”:

這個函式庫提供所有 IP 層資料的設定和取得,透過它 CW 可以取得目前行動裝置所有可用的 IP,然後藉由 IP 的型態 可以判定是 WLAN 或是 GPRS 使用的 IP,WLAN IP 的型 態為 Ethernet ;GPRS IP 的型態為 PPP。這函式庫可以直接 讓應用程式使用[11],如圖 3-3:

Application

IPHelper

圖 3-3 函式庫 “IP Helper”

‹ 利用 NDISUIO(NDIS User-mode I/O)跟 NDIS 溝通:

NDIS(Network Driver Interface Specification)是由 Microsoft 提出用來定義網路卡驅動程式的標準規範,可使網路卡的 驅動程式下不受硬體上不受通信協定的限制[12],在 NDIS 中儲存了一系列 802.11 WLAN 物件,這一些物件紀錄了 802.11 標準中的很多特性,像是行動裝置目前和哪一個 AP 連接或是目前環境的無線訊號強度等等。在作業系統 Win CE 中跑著一隻 driver 稱作 NDISUIIO,這 driver 的功能為

讓應用程式藉由它來對 NDIS 做 802.11 WLAN 物件的存取 動作 [13],如圖 3-4,CW 透過 NDISUIO 這個 driver 可以 跟 NDIS 取得 802.11 WLAN 物件 : “OID_802_11_RSSI”,

此物件代表的定義為目前環境的無線訊號強度。

Application

NDISUIO

NDIS

DeviceIoControl()

圖 3-4 NDIS 和 driver NDISUIO

利用上述的兩個方法可以將網路偵測動作實作出來,實作出的部 份本論文將它包成一個 DLL 檔: NetworkDetector.dll 供 CW 使用。如 圖 3-5:

NDISUIO

NDIS IPHelper

NetworkDetector.dll Client Wrapper

圖 3-5 提供網路偵測功能的 DLL 檔案: NetworkDetector.dll

將此些功能聚集起來包成一個 DLL 檔的好處為提供更大的共用 性,開發者若是利用 EVC++發展可以直接使用這 DLL 檔,若是利用 Java 發展則可以透過 JNI 使用這 DLL 檔[14]。

相關文件