本設計的目標是設計一個基於P2P技術的電子名片系統。其基本功能是電子名片的存儲與管理,電子名片的傳送與傳輸,用戶上線下線,上線用戶搜尋等功能。
本系統使用P2P模式實現,不需要使用伺服器。每台運行本程式的機器均作為對等節點存在。通過本系統,用戶上線後在區域網路中的其他用戶都將得到通知。每個用戶可以向其他用戶有選擇地傳送名片;每個用戶也可以向某個用戶發出名片的請求,待對方同意後就可以獲取其名片,然後成為好友關係。也可以對存儲的電子名片進行刪除操作。用戶可以修改自己的電子名片;也可以查看好友的電子名片,但不能修改好友的電子名片;可以向陌生人請求電子名片,但不能查看及修改陌生人的電子名片。
關鍵字:點對點 電子名片XML C# .NET 資料庫
系統功能設計
對於本地用戶來說,網路中存在的用戶應有兩類角色:好友和陌生人。好友用戶是指,其名片數據(包括不完整內容的名片)已被本地用戶獲取並存儲於本地用戶機器的資料庫中;陌生人是指,其名片內容對於本地用戶來說是未知的,不經過陌生人的允許本地用戶無法獲取其名片內容。
類似於即時通訊軟體,在本系統中用戶能夠登錄網路和退出網路,稱之為“上線”和“下線”,並在上線時能向網路中其他用戶發出可視的通知。
對於自己的名片,本地用戶必須能夠進行編輯,並且可以向網路中其他用戶主動發出名片;對於好友用戶在本地資料庫中的名片副本,本地用戶可以進行查看、更新、刪除、搜尋操作;對於陌生人用戶的名片,本地用戶僅限於請求其名片,而不能有其他許可權,如果陌生人用戶同意此請求則能夠獲取其名片,反之則不能獲取。
處理狀態信息廣播的系統行為模型
系統通過使用UDP協定向網路中廣播用戶的狀態信息。狀態信息包括用戶的名字,以及用戶的狀態等。通過程式設計也可以獲取廣播傳送方的IP等信息。
系統主界面使用列表視圖(List View)顯示網路中存在的用戶。對用戶根據其與本地用戶的關係進行了分組,包括好友組與陌生人組。同時對於代表用戶的圖示使用一個子項目表示其分組;另一個子項目表示其線上或下線狀態。
因此,當本地用戶接收到狀態信息廣播時,系統應該根據廣播內容即時反映到用戶界面中,以供用戶作出判斷。
資料庫設計
資料庫使用ACCESS資料庫管理系統。資料庫中一共有三個表,分別用於存儲本地用戶的名片數據(LocalUser)、其他用戶(好友)的中文名片數據(MyFriendsData)和英文名片數據(MyFriendsDataEn)。存儲本地用戶名片的表中數據欄位全部屬於名片信息欄位,而其他用戶的名片數據表則除此之外還有一個IP欄位,用於存儲對套用戶的IP位址。
為了區別不同的用戶,必須使用一個或幾個對於每個用戶客戶端都能夠知道的對應於每一個用戶客戶端的標識,並且這樣的對應關係應該能組成一個哈希表式的結構。由於本設計不使用伺服器,因此比較容易實現的方法就是使用IP位址來作為這個唯一標識,以IP位址作為標識用戶(名片)的依據。
LOGO欄位存儲的是一個圖片檔案名稱,對套用戶名片的Logo圖片。這個圖片檔案名稱存儲於本地用戶的Images資料夾下,在收到名片數據時提取出包含的Logo圖片數據,並由此在本地創建圖片檔案,然後把圖片檔案名稱存儲於資料庫中。
系統綜述
系統採用單純型P2P架構,沒有專用的伺服器,各個節點計算機之間直接互動信息。任何一台計算機只要安裝本系統,就可以和其他安裝本系統的計算機直接進行通信。從伺服器和客戶端的角度來說,本系統既是一個伺服器又同時是一個客戶端。
網路通信方面,主要使用TCP協定異步通信方式進行命令和名片數據的傳輸,而上線下線的通知則使用UDP協定同步方式進行傳送和接收。
數據的存儲和傳輸方面,在客戶端計算機上使用ACESS資料庫進行存儲,在網路傳輸時將數據從資料庫中提取出來,轉換為XML格式化字元串,然後向目的機器的特定連線埠傳送;接收時轉換方向相反。其中Logo圖片以Base64編碼的形式嵌入XML內進行傳送,接收時再進行Base64解碼並在機器上創建此圖片檔案。
系統用到的窗體類一共有6個,分別是:程式的主界面MainForm,修改名片數據的DisplayCardForm,名片查看類CardForm,名片傳送嚮導類Wizard,上線通知類TaskbarNotifier,“關於”對話框AboutForm。
用到的自定義幫助類有3個:ReadWriteObject和ClientNString兩個類實例化後的對象用於在異步TCP讀取緩衝區時各回調方法之間進行傳遞,以保存讀取緩衝區以及其他有用信息。而ReadXmlIntoDB類則用於,從網路流中讀取位元組數據並轉換為XML格式化字元串後,判斷返回內容,並在確定名片信息有效時將接收的名片數據輸入或覆蓋到資料庫的記錄中。