1. 程式人生 > >C/S+P2P網路模型(一)--聊天

C/S+P2P網路模型(一)--聊天

原文地址

從今天開始我們來實現一個C/S+P2P網路模型,主要功能包括:聊天和傳輸檔案。

聊天分群聊和私聊,雖然不是真的像QQ那樣有個QQ群,但是這樣類比容易理解,在後面我們會仔細說明。

前面我寫過一篇文章講過組播,我們就用組播來實現p2p網路模型。首先而且是最關鍵的一點是:每一個程式例項都對應一個peer結點。接下來我們先來解釋整個程式程式碼框架,再分聊天和傳輸檔案詳細說明。

我們先看整個程式框架。

整個程式框架主要包括兩個模組和一些實體類。

網路模組:實現兩個網路模型,一個是C/S,另一個是P2P。

訊息模組:網路訊息所使用的訊息類。

實體類:包括結點類和管理類等。

下面我們看聊天怎麼實現。

1.要實現聊天,首先使用者要登入。登入主要用到C/S模型,我們使用一個伺服器,使用者登入時將使用者資訊傳送給伺服器,伺服器驗證使用者資訊並給使用者回發確認訊息,同時記錄每一個登入的使用者,在使用者發出獲取當前線上使用者列表的請求時返回該列表。

2.聊天分群聊和私聊。聊天需要用到P2P模型,不需要跟伺服器打交道,直接將聊天訊息發往各個使用者,當然在獲取當前線上使用者列表的時候還是要請求伺服器的。

    ①預設情況下是群聊,我們可以採用組播的方式實現。

    ②私聊要經過下面幾個步驟:

          i. 獲取線上使用者列表。往伺服器傳送請求,由伺服器將列表資訊返回。

          ii.選中一個使用者,將接收方加入訊息頭後進行組播。在這裡我使用名字唯一來標識,所以可以根據名字來唯一確定使用者。

          iii. 關鍵在這裡,在接收組播訊息後,首先解析訊息型別,假設是PrivateMessage,如果發現訊息中的接收方是自己就接收處理,否則就拋棄。

為了儘量減少程式碼量,好讓大家容易理解,我沒有使用介面。

由於程式碼檔案比較多,需要的可以在這裡下載。

上面只是實現了聊天功能,下一篇文章將會實現檔案傳輸功能。