本站小編為你精心準備了P2P在線通信系統的實現參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
基于局域網的即時通信工具,實際上是互聯網即時通信工具的一個小規模版,廣域網上的即時通信工具,如今一般采用UDP或者TCP協議體系來實現,開發技術已經比較成熟,比如較早的MSN即時通信軟件,還有國產的有名的QQ,網易泡泡這些工具統統都實現了廣域網上的即時通信,盡管都實現了即時通信以及文件傳輸的主要功能,但是也各有各的特色,MSN的個性化表情,網易泡泡的易操作性等。而QQ也具有一個相當方便的屏幕截圖功能,另外就是,所有上述軟件都實現了網絡即時視頻,語音聊天功能。這些軟件在使用方面各有特色,在實現方面也各有所長,但由于這些產品正在商業運營階段,其實現方式屬于商業機密,具體細節不可能得知,但是它在大的方面無非就是各種利用各種平臺上的網絡通信接口,建構基于下層TCP/IP,或者UDP/IP協議的軟件產品。在局域網內,這些功能的實現跟廣域網相比更加簡單,因為局域網的網絡結構本身比廣域網要復雜,但是又可借此理解網絡協議以及網絡通信工具的實現原理,所以仍然極具研究價值。本文將討論一種基于Socket的局域網通信工具的設計與實現方法,它具有信息收發速度快,保密性好,占用網絡帶寬資源低,占用服務器吞吐能力低,易于編程實現等優點。
1功能設計
該在線通信系統采用C/S架構,在此架構中,服務器端與客戶端是相互依賴的。客戶端啟用以后,需要查看服務器端是否在線,服務器在線才能正常使用客戶端,如果服務器不在線,則在檢測一定次數后自動退出客戶端程序。在使用過程中,如果客戶端在指定時間內未向服務器端發送信息,服務器認為客戶端下線;客戶端在一定時間內未收到服務器端信息,認為服務器已經下線,則提示用戶并建議退出,用戶在一定時間后沒有退出則自動關閉客戶端程序。客戶端是直接連接到擁有靜態IP的服務器上的,此在線通信系統沒有提供掃描功能所以需要指定服務器地址和昵稱,客戶端實現功能簡單,僅能在客戶端之間相互發送消息。
2基于Socket的C/S結構設計
MFC提供了兩個套接字類,在不同的層次上對WindowsSocketAPI函數進行了封裝,為編寫WindowsSocket網絡通信程序提供了兩種編程模式。CAsyncSocket類,在低層次上對WindowsSocketAPI進行封裝,其成員函數和WindowsSocketAPI的函數調用直接對應。必須自己處理阻塞問題、字節順序問題和字符串轉換問題。CSocket類,從CAsyncSocket類派生來的,是對WindowsSocketAPI的高級封裝。(1)CSocket類結合archive類來使用套接字,就像MFC的序列化協議一樣。(2)CSocket類管理了通信的許多方面,如字節順序問題和字符串轉換問題。(3)CSocket類為Windows消息的后臺處理提供了阻塞的工作模式,這是Carchive同步操作所必需的。下面是使用CSocket對象進行客戶和服務器之間通信的一般編程模型,它只適用于數據流套接字。(1)分別構造服務器和客戶端套接字對象。(2)調用對象的Create函數創建套接字,而Create函數會調用Bind函數將此套接字綁定到指定的地址。需要注意的是為服務器創建套接字是需要為其指定端口號。(3)套接字創建完畢后,服務器調用Listen成員函數開始偵聽客戶的連接請求,而客戶可以調用Connect成員函數向服務器請求連接。(4)當服務器監聽到客戶連接請求時,創建一個新的套接字,并將其傳送給Accept成員以進行數據的發送和接收。(5)為服務器和客戶端的套接字對象分別創建一個與之相聯系的CSocketFile對象。(6)為服務器和客戶端的套接字對象分別創建一個與CSocket-File相聯系的CArchive對象以進行數據的發送和接收。(7)使用CArchive對象在客戶端和服務器套接字之間傳送數據。(8)在任務完成后,銷毀CArchive、CSocketFile和CSocket對象。
3功能實現
用戶通信前必須安裝到本地計算機,通過正確設置后就可以進行實時p2p通信。客戶端的實現主要分為登錄模塊、在線用戶顯示模塊、通信模塊、監聽模塊、請求模塊五部分。在登錄模塊用戶通過設置服務器端IP地址和用戶昵稱就可以連接上服務器,在昵稱部分不能用字符‘|’‘、?’。當用戶成功連接服務器登錄后,客戶端就由登錄模塊進入在線用戶顯示模塊,這個模塊能顯示同一網段內在線的用戶并能定時刷新在線用戶列表。用戶通過雙擊(除了用戶自己外)在線用戶就可以與其進行實時通信。在線用戶的基本信息。服務器端由三部分組成:監聽應答模塊、請求模塊、窗口管理模塊。窗口管理模塊主要以可視化的形式反映出基本的服務器及用戶信息。左側最新信息部分記錄著服務器的狀態,右側在線用戶部分記錄著在線用戶的昵稱、IP地址,服務器能定時的刷新在線的用戶。監聽應答模塊主要負責監聽客戶端發送來的連接請求并給與處理,監聽模塊主要使用OnAccept()函數調用Ac-cept()函數通知監聽的socket應答待連接的客戶端請求。如果客戶端連接成功則服務器把這個用戶加入到在線用戶列表。請求模塊主要負責告知服務器已創建的socket客戶端發送的數據緩存在buffer中,通過調用Receive()函數讀取buffer中的數據。請求模塊還可以告知服務器已創建的socket和客戶端的連接已斷開,然后服務器用戶信息列表部分定時刷新顯示在線的用戶。
4運行結果
用三臺機器通過交換機構成一個局域網,進行正確的網絡配置,三臺機器上都安裝了WINDOWS操作系統,一臺安裝服務器程序,另外兩臺安裝客戶端程序。在使用通信系統前必須啟動服務器,如果服務器未啟動或意外關閉客戶端將無法登錄。(1)雙擊服務器程序圖標運行服務器,將會彈出對話框。(2)單擊啟動服務器按鈕,啟動服務器。服務器程序運行后,可以在本地運行客戶單程序。(1)雙擊客戶端應用程序圖標,啟動客戶端,進入登錄界面。(2)在登錄界面填寫服務器IP和用戶昵稱,確定后連接上服務器進入在線用戶列表窗口。(3)在在線用戶列表窗口雙擊想要與之通信的對象,打開了通信窗口,之后即可進行通信。
作者:朱浩悅 張軍軍 周楠 徐陽 單位:西安文理學院信息工程學院