彭新清,趙聰聰,易子鈞,魏茂盛
(火箭軍工程大學,西安 710025)
當前,通信方式錯綜復雜,話音、圖像和視頻傳輸所需要的基礎設施多,通信質量容易受各種因素的影響,并且費用較大。而隨著技術的發展,市場通信軟件也更多,然而這些軟件并不能保證通信信息的安全,容易出現用戶賬號密碼被竊取、信息被惡意篡改、通信內容遭人竊聽等現象。如何開發一套既能實現通信質量高、傳輸速率快,又能確保信息安全并且費用低廉的系統成為重點發展的方向。
系統工作流程圖如下圖所示。系統的硬件環境由計算機、網線、交換機等組成局域網,通過Ping命令測試網絡狀態。采用的關鍵技術:Sockets套接字、MFC類庫(主要包括:應用程序類、Windows套接字類、數據庫類、對話框類、控件類等)、數據庫應用技術等。

首先利用MFC AppWizard建立應用程序對話框,使用MFC類庫作為靜態的DLL,提供面向對象的資源。然后添加相應的控件。編輯框控件:用戶名IDC_EDIT_USERNAME、密碼IDC_EDIT_PASSWORD、服務器地址IDC_EDIT_ADDRESS、總人數IDC_EDIT_TOTAL、在線人數IDC_EDIT_ONLINE、消息內容IDC_EDIT_MESSAGE;按鈕控件:確定IDOK、取消IDCANCEL、群發IDC_BUTTON_MESSAGE;靜態文本控件:用戶名IDC_STATIC、總人數IDC_STATIC1、在線人數IDC_STATIC2、在線人員IDC_STATIC3、消息內容IDC_STATIC4;列表控件:在線人員IDC_LIST_ONLINE。再分模塊進行編寫程序,(1)響應客戶端注冊、登錄的功能。用戶所有信息由數據庫進行管理,注冊賬號時,會自動將生成的賬號密碼添加到數據庫內,當管理員進行登錄時,利用數據庫提供的接口訪問數據庫,對數據庫內存儲的賬號密碼輪詢,若所用的賬號密碼和數據庫內保存的密碼相同,則允許用戶登錄,這一機制能夠驗證用戶身份是否正確,可以防止他人冒充管理員。Mysql數據庫提供了訪問數據庫的API函數,通過編寫程序的方式將C++和數據庫連接在一起才能對數據庫的內容進行操作。在注冊時,系統通過:m_userName.GetWindowTextA(username);m_password.GetWindowTextA(password);m_address.GetWindowTextA(address)三個語句分別獲取用戶輸入的賬號、密碼及數據庫地址,再通過IsEmpty()函數判斷用戶名或密碼是否為空,如果為空則給出提示并返回注冊界面。用戶端在使用時根據所注冊的賬號進行登陸,登陸也需要服務器端進行驗證,確保訪問者身份的合法性。(2)實時顯示客戶端總人數和當前在線客戶端人數。當有新用戶注冊成功時,會即時反饋消息給服務器端,服務器端接受客戶的注冊,總人數自動加1,當某一用戶使用已注冊過的賬號密碼進行登錄,并且成功登錄到服務器端上時,當前在線人數一欄的數字會自動加1。(3)實時顯示在線用戶的昵稱、IP地址。當某一用戶通過認證登錄到服務器端時,不僅當前在線人數一欄的數字會自動加1,而且會在下方列出登錄用戶的昵稱和IP地址,這個可以識別用戶是否在線,便于管理。(4)在線群發消息。可快速實現消息的群發,主要目的是用于通知類的消息發送。(5)“會議室”功能。受各類因素影響,帶寬不足以支持音頻和視頻通話時,采用這樣的形式進行交流,服務器掌握所有通信內容,適用用戶群體之間 “開會”。利用OnReceive函數用于接收網絡中傳送的消息,根據客戶端的不同請求進行不同處理,用戶發送的消息先發送給服務器,服務器再通過SendUserCommandToIP語句統一向所有“會議室”內的用戶轉發。(6)其他功能。作為管理層,服務器端要求能對用戶信息進行修改、刪除和添加,一種方法是在數據庫直接編輯,另一種方法是編寫SQL語言的方式進行操作,使用起來簡單方便且功能相對全面。從這一點上來說,服務器端可以間接地為用戶進行賬號的分配,方便聯絡通訊時互相識別,這也在一定程度上確保了信息傳輸的安全性。
先進行模塊測試:驗證用戶身份的合法性、實時顯示當前客戶端總數、顯示目前在線的客戶端總數、顯示在線客戶端用戶名和IP地址,群發系統消息等,然后綜合測試系統,確保穩定性和可靠性。通過聯調基本達到預計的效果。
[1] 李琳娜.Visual C++編程實戰寶典[M].北京:清華大學出版社,2014.8.