天天看點

QQ面向對象設計

通訊項目——仿QQ聊天程式

詳細設計說明書

一、引言

此項目為驗證Java語言Socket部分學習成果,本文檔将對此項目進行詳細說明。

二、總體設計

子產品劃分

本項目共分為伺服器端和用戶端兩大子產品。

伺服器端共有6個子產品:

等待用戶端的連接配接,一但連接配接成功則分發給線程處理;

接收用戶端傳遞來的消息;

向用戶端回複應答消息;

連接配接資料庫并進行增删改查等操作;

轉發A用戶端的消息給B用戶端;

處理用戶端下線。

用戶端共有5個子產品:

連接配接伺服器;

向伺服器發送消息;

接收伺服器的應答消息;

接收有伺服器轉發的另一用戶端消息;

斷開與伺服器的連接配接。

功能劃分

本項目所實作的功能有:

注冊,登陸,添加好友,單人聊天。

其中添加好友做了驗證處理,單人聊天支援:視窗抖動,發送表情,傳送檔案等特色功能。

技術點支援

本項目使用Java語言編寫,所涉及到的技術點有:Socket,Thread,GUI,JDBC等。

環境支援

Eclipse,MySQL

三、詳細設計

資料庫設計

資料庫共四張表格,見下圖:

QQ面向對象設計

由上至下分别為:組群資訊表,組群與使用者聯系表,使用者資訊表,使用者好友關聯表。

Groups表結構如下:

QQ面向對象設計
QQ面向對象設計

Groupsusers表結構如下:

QQ面向對象設計
QQ面向對象設計

Users表結構如下:

QQ面向對象設計
QQ面向對象設計

Usersfriends表結構如下:

QQ面向對象設計

通信協定

消息資料類型定義

類型 說明
byte 用于表示消息類型,一個位元組的整數
Unsigned Integer  網絡位元組順序
Octet String  定長字元串,不足在右邊補齊二進制0 /0

消息類型

标志值 描述
1 注冊請求消息 0x01  用戶端發送注冊請求資料給伺服器
2 注冊應答消息 0x02  伺服器傳回注冊結果
3 登入請求消息 0x03  用戶端發送QQ号碼和密碼的消息請求登入
4 登入應答消息 0x04  伺服器傳回的登入結果應答消息
5 線上好友清單消息 0x05  伺服器發送給登入成功用戶端的其他好友清單消息
6 好友上線消息 0x06  伺服器發送通知某使用者好友上線消息
7 好友下線消息 0x07  伺服器發送通知某使用者好友下線消息
8 聊天消息發送 0x08  用戶端發給伺服器或伺服器發給某用戶端的文本聊天消息
9 檔案傳送消息 0x09  用戶端發給伺服器,或伺服器發給某用戶端的檔案資料傳送消息
10 檔案傳送應答 0x11  用戶端發給伺服器,或伺服器發給某用戶端的檔案資料傳送應答消息
11 截圖消息發送 0x12  用戶端發給伺服器或伺服器發給某用戶端的截圖消息
12 視窗抖動消息 0x13  用戶端發給伺服器或伺服器發給某用戶端的視窗抖動消息
13 建立組群請求消息 0x14  用戶端發給伺服器的建立組群消息
14 建立組群請求應答 0x15  伺服器發送給用戶端的建立組群應答消息
15 查找線上使用者消息 0x16  用戶端發給伺服器查詢線上使用者的消息
16 查找線上使用者應答 0x17  伺服器應答用戶端的查找消息結果
17 添加好友請求 0x18  用戶端發給伺服器請求加好友消息,或伺服器發給被添加使用者的加好友的請求消息
18 添加好友應答 0x19  伺服器應答用戶端加好友的結果
19伺服器發送群組清單 0x21  登入後伺服器發送個用戶端該使用者的群組清單
20查找組群請求 0x22  用戶端發送給伺服器的查找組群請求
21查找組群應答 0x23  伺服器發送給用戶端的查找組群應答
22添加組群請求 0x24  用戶端發送給伺服器的添加組群請求
23添加組群應答 0x25  伺服器發送給用戶端的添加組群應答
21群聊消息發送與接收 0x26  用戶端發給伺服器或伺服器發給該群所有用戶端的文本聊天消息

消息整體結構規則

結構
Message Head  消息頭 所有消息公共的消息頭
Message Body  消息體 各種消息的消息體不同

消息頭規則

字段名 資料類型 位元組數
totalLen  int  消息位元組總長 包含消息頭總長度
type  byte 
dest  消息目的地 消息發送給誰
src  4 消息源 誰發送的消息

具體消息結構定義

1、注冊消息體結構

字段 長度
nikeName  10  注冊使用者昵稱
password  注冊使用者密碼
注冊的時候,消息頭中的dest值為伺服器的QQ号碼

2、注冊應答消息體結構

state  伺服器傳回的注冊結果應答,0為成功,消息頭中的dest值為注冊成功的QQ号碼;非0為注冊失敗。

3、登入請求消息體結構

pwd  消息總長減去消息頭長度 登入使用者的密碼

4、登入應答消息體結構

0:成功 1:賬号錯誤 2:IP驗證失敗

5、好友清單消息體結構

listCount  好友分組個數
ListCount  listName  一個分組的名字
bodyCount  本組内有多少個使用者
組内的bodyCount個好友 bodyNum  組内一個好友的QQ号
好友昵稱
如果有多組,後面的結構同 listCount個分組資料部分

6、好友上線消息體結構

消息頭長度 消息頭中包含消息類型

7、好友下線消息體結構

8、聊天消息體結構    

msgContent  聊天的消息内容

9、檔案傳送消息體結構

filename 傳送的檔案名字
fileData  總長-消息頭長(13)-256 檔案内容

10、檔案傳送應答消息體結構

被發送檔案的用戶端傳回給伺服器或伺服器傳回給發送檔案的用戶端的檔案傳送結果應答,0為接收,前者消息頭中的dest值為伺服器QQ号碼,後者消息頭中的dest值為發送檔案的用戶端的QQ号碼;1為拒絕接收;2為發送成功;-1為發送失敗。

11、截圖發送消息體結構

待定 截屏得到的圖檔

12、視窗抖動發送消息體結構

13、建立組群請求消息

GroupName  String  16  建立的組群名稱

14、建立組群請求應答

GroupID  伺服器生成的群ID

15、查找線上使用者消息

16、查找線上使用者應答消息體結構

userCount  使用者數量
userCount個使用者資料 一個使用者的昵稱
QQNum  一個使用者的QQ号碼
如果有userCount個使用者,後面的結構相同

17、添加好友請求消息體結構

要添加的好友的QQ号碼

18、添加好友應答消息體結構

被添加的好友的QQ号碼
被添加的好友的昵稱

19、伺服器發送群組清單

GroupCount  組群數量
一個組群的名稱
GNum  一個組群的ID
GMasterNum  群組的ID
如果有GrouopCount個組群,後面的結構相同

20、查找組群消息

21、查找組群應答

22、添加組群請求

GID  要添加的群的ID

23、添加組群應答

領域對象協定

QQ面向對象設計