顧亭亭
南京航空航天大學金城學院 江蘇 211156
Windows CE 是微軟公司推出的一款功能強大的實時嵌入式操作系統,他可以用在手機、機頂盒、智能手持設備、網關、數字媒體設備、工業控制等多種場合。由于Windows CE采用模塊化設計,開發人員可以根據系統的需要選擇自己需要的模塊,從而達到減小系統體積的目的,已經越來越多地被開發廠商支持及使用,迅速成為嵌入式操作系統主流平臺之一。Windows CE 操作系統有著優越的網絡性能,是最早在其內核中加入TCP/IP協議的嵌入式實時操作系統之一。隨著網絡的發展和嵌入式設備的普及,本文討論了在Windows CE下實現網絡通信的關鍵技術和設計方法。
在 Windows CE 產品開發前,需要進行系統的定制。Platform Builder 是微軟提供給 Windows CE 開發人員進行基于Windows CE 平臺下嵌入式操作系統定制的集成開發環境。它包括了基本的文件編輯能力、多目標編譯調試工具包、特性編輯器、軟件開發工具包(Software Development Kit,SDK)導出工具、向導工具以及用于做測試、性能分析等工作的多個工具包,從而能夠更加方便快捷地配置、構造和調試系統。Platform Builder 的強大功能,已使其成為Windows CE平臺下嵌入式操作系統開發和定制的必備工具。
對系統的定制要掌握一個原則,就是在功能保證完備的情況下,盡可能地減小內核的尺寸,以節省資源。由于Windows CE 操作系統采用模塊化結構設計,所以在定制操作系統時只需根據設計需要添加相應的模塊。定制平臺前要導入硬件平臺的BSP(板級支持包),BSP 里包含了硬件平臺的驅動和操作系統所需要的應用軟件,本系統采用的是微軟公司提供的針對該處理器的BSP樣本。此外,定制操作系統還要依據不同的處理器選擇相應的ARM版本。
Windows CE 6.0在網絡通信方面提供了完善的軟件支持,包括:
(1) 提供與Unix完全兼容的Socket API函數,使其他平臺的網絡應用程序很容易移植到 Windows CE中,而Windows CE中的應用程序也容易移植到其他平臺中;
(2) 操作系統本身也包含大量各種網絡協議,如TCP/IP、UDP、ICMP等;
(3) 操作系統本身提供各種網絡服務,如IIS、TFTP;
(4) 提供小端口網卡驅動程序接口,只需編寫網卡的小端口驅動程序就能利用該網卡實現上面提供的各種網絡協議及網絡服務;
(5) 以上各層軟件的關系如圖1所示。

圖1 Windows CE網絡通信體系結構
TCP通信是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。具有五大特點:①面向連接的傳輸;②端到端的通信;③高可靠性;④全雙工方式傳輸;⑤采用字節流方式。
TCP通信是指在進行通信之前,通信雙方必須建立連接,通信結束之后終止其連接。也就是指當兩臺計算機上的兩個應用程序之間利用TCP進行通信時,源和目標之間會建立一個虛擬連接,這個連接一旦建立,兩臺計算機之間就可以把數據當作一個雙向字節流進行交換。
TCP建立的連接是端到端的連接,即源與目標之間的連接。TCP協議向應用層提供了面向連接的服務,以確保網絡上所傳送的數據包被完整、正確、可靠的接收。一旦數據有損傷或丟失,則由TCP負責重傳,應用層不參與解決。
本文在Windows CE中實現一個TCP客戶端應用程序,向PC機端的TCP服務器請求連接,連接成功后,客戶端應用程序就可以與PC端的TCP服務端應用程序進行TCP通信了,連接的流程圖如圖2所示。在網絡應用中,網絡通信一般可通過Socket實現。Socket編程均采用客戶機/ 服務器模式。

圖2 連接流程圖
由于在Windows CE下的TCP/IP協議處理方法是分別在服務器端和客戶機端創建Socket程序,建立通信聯系的,下面就分別給出服務器端Socket和客戶機端 Socket的實現方法。調用的主要函數有:創建套接字函數 socket、監聽函數listen、等待連接函數accept、數據接收函數read、數據發送函數write 等。
2.3.1 服務器端socket操作
(1) 建立套接字函數socket;
(2) 綁定地址和端口函數bind,將該socket與本機地址和端口號捆綁;
(3) 建立套接口隊列函數listen,在監聽端口上監聽客戶機的連接請求;
(4) 接收連接函數 accept,當 accept捕捉到一個連接請求時,就建立連接線路并返回一個新的通信文件描述符;
(5) 處理連接函數read/write;
(6) 關閉套接口close。
服務器端利用Visual C++編寫可運行于PC機上的TCP通信應用程序。該程序調用Windows平臺提供的Socket API函數,使用TCP協議。服務器端首先創建一個socket,等待與客戶機端的連接,連接成功后進行數據的傳送。
2.3.2 客戶機端socket操作
(1) 創建客戶端的Socket
客戶端應用程序首先調用WSAStartup函數來與Winsock的動態連接庫建立關系,然后調用 socket來建立一個 TCP socket。socket 函數第一個參數只能是 AF_INET,socket函數的第二個參數設置位SOCK_STREAM,其第三個參數指定為0。
(2) 向服務器提出連接申請
對客戶端來說,它不需要綁定,可以直接連接服務器端。調用 connect函數來提出與服務器端建立連接的申請,首先定義一個地址結構體變量,并對其成員進行賦值,設定服務器端的IP地址和端口。
(3) 和服務器端進行通信
當建立連接后,就可以調用send函數向服務器端發送數據了,之后調用recv函數接收服務器發送的數據。
(4) 關閉套接字
當完成通信后,調用closesocket函數關閉套接字,釋放為此套接字分配的資源。最后調用WSACleanup函數,終止對套接字庫的使用。
客戶端利用 Visual Studio 2005編寫一個可運行于Windows CE 6.0操作系統上的應用程序,該程序調用Windows CE平臺提供的Socket API函數,使用TCP協議,通過以太網芯片驅動。
用網線連接PC機與網絡終端,在網絡終端中的以太網芯片設置Windows CE的IP地址,確保通過PC可以Ping通網絡終端。在PC機上運行TCP測試工具軟件,設置本機端口號為1011,然后點擊“Connection”按鈕,啟動一個TCP服務。在Windows CE中,點擊Embedded_TCP.exe,在跳出的對話框中填寫要連接的服務端地址(即 PC機地址,為192.168.2.22)和端口號(為1011),然后單擊“connect”按鈕,創建成功,按鈕會變成不可用,否則會報錯。這時,TCP測試工具軟件中監聽到一個客戶端連接,就可以與客戶端進行網絡通信了,如圖3所示。


圖3 通信軟件測試
本文根據Windows CE操作系統的特點和TCP協議,利用Socket套接字編程,設計了在Windows CE下的網絡通信軟件,并在網絡終端中運行成功。軟件可實現嵌入式網絡終端和PC 機之間的通信功能,具有較大的靈活性和擴展性。在此基礎上可開發文本傳輸、通信故障檢測等應用軟件。
[1]鄧成中,黃惟公,萬松峰.基于嵌入式 ARM&WinCE的小型監控系統的設計[J].微計算機信息.2005.
[2]吳弋旻,葛海江,張能貴.基于 WinCE 的模擬鍵盤驅動程序的實現[J].機電工程.2008.
[3]林建民.嵌入式操作系統技術發展趨勢[J].計算機工程.2001.
[4]YAGBMOUR K.構建嵌入式Linux[M].韓存兵,龔波,譯.北京:中國電力出版社.2004.
[5]何宗鍵. Windows CE 嵌入式系統[M].北京:北京航空航天大學出版社.2006.
[6]謝希仁.計算機網絡[M].大連:大連理工大學出版社.2004.
[7]李巧玲.基于C#-Socket的網絡通信程序設計[J].福建電腦.2009.