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