1.研究動機與規劃
2.硬體架構與平台
3.架構分析
3.2運作分析
4.系統功能
4.1 Client功能
4.2 Server功能
4.3 Web功能
5.實物畫面
6.專題收穫
7.參考書目
近年來,Linux因為開放原始碼的關係,開始在資訊界中紅了起來。其開放原始碼的優點,使得大家能夠修改Linux將其應用在各個領域中,像是IA家電、嵌入式系統甚是遊戲機的作業系統。雖然市面上早已讓WinCE和Palm佔領了PDA的市場,但是Linux在PDA的應用卻才剛起步。再加上無線網路開始蓬勃發展,因此若能結合PDA的可攜性及無線網路的通訊能力,讓PDA使用者能隨時獲得最新的訊息,所以本專題嘗試在Linux PDA上開發傳訊軟體,並從中習得Linux下程式設計的經驗。
[初期]
- 研究Linux PDA基本架構
- 架設Linux PDA實機
- 架設Linux PC
- 研讀GTK 視窗程式設計
[中期]
- 訂定Server與Client端的通訊規格
- Server程式撰寫
- 在Linux PC上開發Client軟體
- 程式移植至Linux PDA測試
[後期]
- 程式測試
- 程式效能調正
開發平台:Microsoft Windows(Server)、Linux RedHat(Client)
開發語言:Virtual Basic(Server)、C(Client)
執行平台:Microsoft Windows(Server)、Linux PDA(Client)
本專題在Client-Server之間的通訊,都是採用XML格式的訊息。以往學長們是採用類似"分行式"或"分隔式"的方式來傳送資料,舉例如下:
以分行式來傳送狀態
owenet <-第一行
00022d28336e <-第二行
35 <-第三行
或以分隔式來傳送狀態
owenet , 00022d28336e ,35
採取上面兩種方法都有共通的缺點:
- 不易了解所表達資料: 今天如果換作他人接手程式,繼續開發下去,由於無法直接看出資料所表達的意義,必然需要花時間去熟悉這些自定的規格。
- 缺乏擴充性: 由於規格式訂死的,程式都是依照規格在撰寫,例如第一行(格)是代表ID;第二行(格)是MacAddress;第三行(格)是訊號強度。如果今日要在第二行和第三行之間插一行代表"傳送時間"?很明顯的,所有程式必須重新改過。
所以,專題決定採用目前新興的可延伸標記語言(extensible Markup Language : XML)來替代以往的 "分行式"、"分隔式"方法。
封入UDP封包的XML狀態
<state>
<id>owenet</id>
<apmac>00022d28336e</apmac>
<quality>35</quality>
</state>
XML的優點如下:
- 結構性: 一目了然,人與電腦都很容易分析(Parse)這些資料
- 可擴展性: 由於欲讀取的資料是用Tag包住,因此資料無固定的順序,只要讀取Tag,就能知道目前所讀的資料是什麼。
但是,也有著缺點:
- 增加開發難度: 由於必須分析Tag,因此增加了開發上的難度。
- 傳送的資料量加大: 因為多增加了Tag,導致欲傳送的資料量增加了。
所幸,上面兩點都不難克服。如今XML幾乎已成為異質平台間的標準交換格式,所以也出現了許多的方便分析XML的元件出現,使得以後分析XML不再是難事。同時,寬頻網路的出現,增加了傳遞資訊的速度,即使資料量增加也能輕易解決。
3.2 運作分析
首先,Linux PDA使用WirelessLan Library來偵測所在地的AP(Access Pointer) MAC address、信號Quality,一旦偵測到網路的存在,會將狀態以XML方式編寫,封入UDP封包中,傳送給伺服器,讓伺服器得知Client在目前在線上。
封入UDP封包的XML狀態(範例)
<state>
<id>owenet</id>
<apmac>00022d28336e</apmac>
<quality>35</quality>
</state>
<id>…</id> : Client端使用者的ID <apmac>…</apmac> : AP 的MacAddress
<quality>…</quality> :訊號的強度 0~100 之間之所以採用UDP的傳送方式,是因為UDP不需要像TCP先行建立兩端的連線,UDP可以直接指定欲傳送的目的位址及Port。
因此,本專題決定採用UDP方式來傳送,主要是因為:
- 網路品質不固定-由於無線網路訊號時強時弱,TCP有時會有斷線的情況發生,所以採用不須確定連線的UDP來傳送。
- 傳送的資料重要性不高-Linux PDA傳送給Server端的,僅僅是Linux PDA本身的狀態而已,內容並非重要資訊。
- 傳送次數頻繁-再加上Linux PDA傳送狀態的頻率很頻繁,因此若是因為網路的不穩定,而導致封包的遺失等,影響的程度有限。
在Client上,會另外開一個Thread出來,專門聆聽TCP/IP Port,等待Server端傳送訊息過來。
而在Client內有XML Parser,針對Server傳送過來的訊息加以分析,並將資料擷取出來,顯示給使用者觀看。同時,程式也會將傳來的訊息儲存起來,當然也是以XML格式,因此即使不執行程式,也能以一般文字閱讀軟體來觀看。在Server端,本專題是以Win32為平台來開發,主要是因為目前在Win32平台上,目前所支援的元件最多在開發上能節省較多的時間。
上圖為Server端執行的畫面,可以看到使用者的狀態,如ID、IP、AP MAC及他可能的位置(藍色區塊)。並可線上送訊息給他。在Server端方面,開啟另一個UDP Port來聆聽Client傳來的狀態資訊。如果Client不在線上名單中,就將Client 加入線上使用者名單,並且將其訂閱的資訊立即從網上取得,並傳給Client :
匯率的XML格式
<rate>
<US>1</US>
<TW>34.46</TW>
<JP> 122.060</JP>
<DE>2.164</DE>
<HK>7.7996</HK>
</rate>
一般訊息
<msg>
<sender>WMLab Server</sender>
<title>New MAIL</title>
<time>2001-10-29 18:00</time>
<content>You have 1 new mail in you mail-box</content>
</msg>
- 接收/儲存訊息
Client端能接收來自VB Server或Web Server及任何採用TCP/IP通訊程式所傳來的訊息。同時所接收的訊息以文字格式儲存在PDA中。
如圖:
(一般狀態)
(有訊息傳進來時)
- 即時匯率轉換
Client端提供一套7國的基本匯率轉換程式,能將輸入的金額做匯率轉換。而匯率轉換表,每當Linux PDA連線上VB Server時,會自動取得最新的匯率。
如圖:
(七種匯率供選擇)
(匯率轉換結果)
目前Server端支援的功能如下:
- 線上即時傳送訊息: Server可以即時對線上的Client傳送訊。
- 傳送股市資訊: 使用者可以設定所要訂閱的股市資訊,Server每隔五分鐘就傳送該股票最新的股價。
- 最新匯率: 使用者上線時,Server會傳送最新的匯率表供Client做轉換。
- E-Mail檢查: 使用者可以設定他的E-MAIL信箱,Server會定期檢查,有無新的信件,並通知使用者。
- 新聞資訊: Server會抓取最新的新聞標題,傳送給Client。
- 根據AP 卡號,指出使用者大概的所在地。
(Server 運作畫面)
為了讓使用者更方便設定、使用,另外開發了Web端的設定系統。
目前Web 上提供了:
- 線上設定所要檢查的E-Mail信箱
- 設定所要取得的股票資訊
- 瀏覽線上使用者
- Web線上傳訊給PDA
其實,這是學生第一次撰寫Linux 環境下的視窗程式,還有網路通訊。由於平時都是在Windows平台下撰寫程式,所以初次來到Linux下,顯得相當的不習慣,而且經常出現問題。後來,向學長請教與及研讀下,才漸漸熟悉Linux下的開發環境。
在資料通訊方面,採用目前熱門的XML,也因此在開發中,也研讀了許多有關XML的資料,包括XML的格式、如何解析(Parse)XML等相關技術,可以說是另一門收穫。
<<Linux程式設計教學手冊>> , 基峰
<<XML 程式設計>> , 基峰
Unix Network Programming
Virtual Basic 6.0 Windows API