C/S+P2P网络模型(一)--聊天
原文地址:http://blog.csdn.net/whoami021/article/details/21577415
從今天開始我們來實現(xiàn)一個C/S+P2P網(wǎng)絡(luò)模型,主要功能包括:聊天和傳輸文件。
聊天分群聊和私聊,雖然不是真的像QQ那樣有個QQ群,但是這樣類比容易理解,在后面我們會仔細(xì)說明。
前面我寫過一篇文章講過組播,我們就用組播來實現(xiàn)p2p網(wǎng)絡(luò)模型。首先而且是最關(guān)鍵的一點是:每一個程序?qū)嵗紝?yīng)一個peer結(jié)點。接下來我們先來解釋整個程序代碼框架,再分聊天和傳輸文件詳細(xì)說明。
我們先看整個程序框架。
整個程序框架主要包括兩個模塊和一些實體類。
網(wǎng)絡(luò)模塊:實現(xiàn)兩個網(wǎng)絡(luò)模型,一個是C/S,另一個是P2P。
消息模塊:網(wǎng)絡(luò)消息所使用的消息類。
實體類:包括結(jié)點類和管理類等。
下面我們看聊天怎么實現(xiàn)。
1.要實現(xiàn)聊天,首先用戶要登錄。登錄主要用到C/S模型,我們使用一個服務(wù)器,用戶登錄時將用戶信息發(fā)送給服務(wù)器,服務(wù)器驗證用戶信息并給用戶回發(fā)確認(rèn)消息,同時記錄每一個登錄的用戶,在用戶發(fā)出獲取當(dāng)前在線用戶列表的請求時返回該列表。
2.聊天分群聊和私聊。聊天需要用到P2P模型,不需要跟服務(wù)器打交道,直接將聊天消息發(fā)往各個用戶,當(dāng)然在獲取當(dāng)前在線用戶列表的時候還是要請求服務(wù)器的。
? ? ①默認(rèn)情況下是群聊,我們可以采用組播的方式實現(xiàn)。
? ? ②私聊要經(jīng)過下面幾個步驟:
? ? ? ? ? i.?獲取在線用戶列表。往服務(wù)器發(fā)送請求,由服務(wù)器將列表信息返回。
? ? ? ? ? ii.選中一個用戶,將接收方加入消息頭后進行組播。在這里我使用名字唯一來標(biāo)識,所以可以根據(jù)名字來唯一確定用戶。
? ? ? ? ? iii.?關(guān)鍵在這里,在接收組播消息后,首先解析消息類型,假設(shè)是PrivateMessage,如果發(fā)現(xiàn)消息中的接收方是自己就接收處理,否則就拋棄。
為了盡量減少代碼量,好讓大家容易理解,我沒有使用界面。
由于代碼文件比較多,需要的可以在這里下載。
上面只是實現(xiàn)了聊天功能,下一篇文章將會實現(xiàn)文件傳輸功能。
總結(jié)
以上是生活随笔為你收集整理的C/S+P2P网络模型(一)--聊天的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CMFCTabCtrl的使用
- 下一篇: C/S+P2P网络模型(二)--上传下载