目前基于Windows CE的產品大多數具有上網功能,能夠連接到Internet實現瀏覽網頁、收發郵件等基本功能。要實現更多的功能取決于連接Internet的速度,而速度取決于連接Internet的模式。連接Internet的模式分為兩種︰有線和無線。事實上大多數產品還是採用無線上網模式。
基于Windows mobile的Pocket PC和Smart phone能夠輕鬆實現上網功能。這兩種產品的軟體開發人員可以不必過多考慮如何實現撥號上網。而對于採用定製Windows CE內核的產品而言,相關的軟體開發人員必須自己實現撥號上網。幸運的是Windows CE的SDK中包含了撥號上網的支持,使軟體開發人員的工作大大減輕。
撥號上網的硬體設備可以是獨立的帶內置數據機和具有GPRS功能的手機,也可以是嵌入到主板中帶有同樣功能的手機晶片。具體是什麼並不重要,因為Windows CE包含的撥號上網模塊採用標準的AT命令集與硬體設備通信。軟體開發人員可以直接利用CE提供的界面函數來控制整個撥號過程,直到斷開連接。
Windows CE.NET 提供了一個被稱為RAS(Remote Access Service)的服務,透過RAS基于Windows CE的產品可以透過WAN(廣域網)或VPN(虛擬個人網路)連接到遠程伺服器上。調用RAS的應用程式通常在客戶機上執行,透過電話網連接到遠程伺服器,這種連接使用兩種標準的遠程訪問協議︰PPP點對點協議和SLIP串行線路Internet協議。RAS架構如圖1所示。從圖中可以看出RAS處于ISO/OSI模型的上層,下層的TAPI(電話API)調用Unimodem,Unimodem是通用的數據機驅動程式,它調用串口API實現與調製解調設備的通信。
图1 RAS服务结构图
Windows CE.NET下RAS所具备的所有功能同PC下的相似,同样支持电话本、拨号控制脚本。不同的是CE下的RAS的電話本是存放在註冊表中。這些都是次要的功能,在此不給予講述。實現撥號必須調用的函數如下︰
函數
RasDial
|
建立RAS連接
|
RasEnumEntries
|
列出註冊表中所有撥號記錄
|
RasGetConnectStatus
|
獲得指定遠程訪問連接的當前狀態。
|
RasGetEntryDialParams
|
獲得指定的上次成功撥號記錄的連接數據(參數)
|
RasSetEntryDialParams
|
設置指定的上次成功撥號記錄的連接數據(參數)
|
RasGetEntryProperties
|
獲得撥號記錄屬性
|
RasSetEntryProperties
|
設置撥號記錄屬性
|
RasHangUp
|
終止RAS連接
|
基于Windows CE的產品在設計上有的能夠在斷電前保存註冊表數據,有的不能夠。對于不能夠保存註冊表數據的產品,採用電話本來撥號是行不通的。只能讓用戶每次啟動后重新輸入撥號數據,或者將數據保存到永久存儲器上,在下一次撥號程式啟動時先讀取撥號數據。
整個撥號狀態分為同步和異步兩種。同步狀態下RasDial函數直到建立連接或者發生錯誤不能繼續工作時才返回。同步模式的缺點是客戶不能收到連接操作的當前狀態和進度訊息。但是仍然有解決方法,辦法是創建一個新的線程來進行撥號(調用RasDial),另外創建一個新的線程每隔一段時間查詢當前撥號狀態(調用RasGetConnectStatus)。相比較異步模式在得到當前撥號狀態方面要容易的多。異步模式下RasDial函數會立刻返回,接著可以調用RasGetConnectStatus得到當前撥號狀態。
RasGetEntryDialParams和RasGetEntryProperties兩個函數得到的是不同方面的數據。在此做一說明︰CE為DialPrarms撥號參數定義了架構體RASDIALPARAMS。它包括撥號記錄名、電話號碼、用戶名、密碼、域名等。而對于Properties屬性數據,CE定義了架構體RASENTRY。它包括連接選項、國家碼、區域碼、本地電話號,可以指定本地IP位址、遠程DNS伺服器IP、遠程WINS伺服器IP等,還可以指定連接控制腳本文件路徑、採用的協議、數據機類型及名稱等。在撥號前一定要設置要這些參數,不過不必每個參數都設置。最簡單的辦法是得到系統默認的所有參數。調用代碼如下︰
DWORD dwReturn;
dwReturn = RasGetEntryProperties(NULL, L"", &RasEntry, &dwSize, NULL, NULL);
if(dwReturn != 0)
{
////不能得到系統撥號參數
return;
}
得到系統默認的參數后再加以修改,這樣避免了設置錯誤的參數,而且大多數參數不用我們設置。關於撥號上網就講這么多,如果讀者有疑問或者遇到困難可以發郵件給我,如果有時間我將回複。
另外關於PlatformBuilder,很多人發郵件給我希望我能回答他們關於PB的問題。在這裡我向讀者們宣佈,關於PB和EVC的書我和我的同事正在寫,預計9月份就能夠完成。這本書詳細介紹了PB(包括驅動)和EVC的使用,還有一些開發實例。PB和驅動部分都是我的同事寫的,他們很有經驗。
文章定位: