本篇文章由:原使用者名( zg51747708),現在:騷裡騷氣 曾廣 原創,未經允許不可以轉載 (我建立的伺服器已經不再運作了。源碼僅供學習,如果想自己搭建伺服器,請安裝下面的資料庫結構圖,建立對應資料庫,并且設定好連結字元串) 我的SaoChat賬号是51747708哦!添加好友必須對方也線上哦!不然就要提示!
大家可以來注冊。伺服器24小時運作。
賬号可以是1-11位數,密碼1到20位。 (賬号除了0都是可以申請的哦!)0是内部使用者。
用戶端下載下傳位址: http://pan.baidu.com/s/1hrHOIZ6 KEY : k5ba
發現BUG或者交流小夥伴可以私聊我的QQ哦!互相學習!共同進步!
用戶端,伺服器源碼,已經工程說明下載下傳位址:
http://pan.baidu.com/s/1eRA1qlc KEY :3zsc
概述
• 協定采用:UDP協定(應答機制,丢包重發)
• 同時線上人數:2000人以下
• 資料庫:SQL server 2008
實作的功能:
1.賬号注冊
2.登陸
3.好友(添加,删除,如果一方删除另一方,将兩方都失去對方好友)
4.分組管理好友(分組操作,添加删除,移動好友)
5.收到對方消息,将自動彈出聊天視窗。
伺服器
一,伺服器模型
伺服器采用,多線程單使用者處理。
二,編寫環境
C++ MFC類庫 VS2017
三,單元子產品
• 單使用者處理單元(能夠一對一處理一個使用者的所有請求)
• (主通信線程)線程管理單元(能接受新使用者建立連接配接請求,經過驗證賬号密碼後,建立起一個單使用者處理單元(線程),與其進行互動)
單使用者處理單元(類似服務員)
處理各種互動資料,處理用戶端一切請求。
(主通信線程)線程管理單元(類似管理者)
負責處理,注冊請求,登陸請求。登陸成功後,建立起對應的通信線程,并管理通信線程。
資料組成部分
• 資料庫操作類 (CDataBaseUserIDInfo)(采用ado com接口操作資料庫)
• 使用者通信處理線程函數 (UserCommunication)
• 主通信線程函數 (MainCommunication)
• 使用者類 (CUser)
四,伺服器要求
本人測試時,伺服器使用的系統是:
MicrosoftWindwos Server 2012 R2 Datacenter
資料庫采用 SQLserver 2008 R2 版本
伺服器配置:
CPU: Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz
RAM:2GB
磁盤空間: 40GB (包含作業系統)
五,伺服器界面
六,備注
///伺服器關閉
注意:在主線程的WM_CLOSE消息響應中。必須要等待所有線程都退出後方可執行。
{
設定全局的退出變量的值為TRUE。(這個變量在stdafx.cpp内)
并且檢測所有線程的SOCKET狀态,如果為阻塞,就關閉SOCKET使其檢測退出變量。
在WM_CLOSE消息響應的函數中,一直檢查使用者類數組中所有成員對應的線程的運作狀态直到全部退出為止。并提供強制退出按鈕。
}
七,好友資料格式
// 好友資料資料發送格式
content:前sizeof(char)個位元組(1)存儲是否還有好友清單
content:接下來sizeof(char)個位元組(1)存儲是否這個分組還有好友
content:接下來(22)個位元組存儲好友清單分組名稱(10個字元一個結束符)wchar_t
content:剩下的,每個(35位元組)存儲一個好友資訊
(Remarker:一次最多傳輸27個好友
{每個好友的資訊存儲格式
(char[1])線上狀态(char[12])好友ID (char 22)好友備注 {共35位元組}
}
八,工程目錄
九,資料庫設計
兩張表
user_friend_tables
user_info_tables用戶端
一,編寫環境
二, C++ MFC類庫 VS2017
二,組成部分
視窗組成
登陸視窗
注冊視窗
使用者界面
右鍵菜單
聊天界面
三,通信線程
l 請求線程
l 接收線程
請求線程負責各種請求(例如,添加好友請求,發送消息請求…)
接收線程負責接收(例如,接收消息,接收好友請求…)
四,通信協定
協定檔案
Protocol.h
協定格式
typedefcharOneBty;
//----------------------------資料包格式
typedefstructSao_Protocol
{
OneBty action;
OneBty id[SAO_LENTH_ID + 1];
OneBty password[SAO_LENTH_PASSWORD+ 1];
OneBty content[SAO_LENTH_CONTENT+ 1];
}SAO_PROTOCOL, *SAO_PPROTOCOL;
協定格式:
賬号#密碼#行為#内容
資料包大小: (1023位元組)
行為:0-256種 (1位元組)
賬号:1到11位的數字。 (11位元組)
密碼:6到20位字母數字元号組合。(20位元組)
内容 (989位元組)
行為清單:
//----------------------------ACTION
#defineSAO_PROTOCOL_FAIL -1 //操作失敗(登陸時代表密碼錯誤)
#defineSAO_PROTOCOL_SUCCESS 0 //操作成功(登陸時代表密碼正确)
#defineSAO_PROTOCOL_LOGIN 1 //登陸
#defineSAO_PROTOCOL_REGIST 2 //注冊
#defineSAO_PROTOCOL_SEND 3 //發送消息
#defineSAO_PROTOCOL_LOGOUT 4 //登出
#defineSAO_PROTOCOL_NO_USER 5 //使用者不存在
#defineSAO_PROTOCOL_NEW_PROT 6 //新通信端口(伺服器發送給用戶端)
#defineSAO_PROTOCOL_REQUEST_FRIEND_LIST 7 //請求好友清單(伺服器發送給用戶端時,代表是好友清單資料)
#defineSAO_PROTOCOL_I_ONLINE 8 //表示我線上(使用者發送給用戶端)
#defineSAO_PROTOCOL_CHANGE_GROUP_NAME 9 //改變分組名稱
#defineSAO_PROTOCOL_RECV 10 //接收消息
#defineSAO_PROTOCOL_REQUEST_FRIEND_LIST_F 11 //第一次請求好友清單
#defineSAO_PROTOCOL_ADD_GROUP 12 //添加分組
#defineSAO_PROTOCOL_DELETE_GROUP 13 //删除分組
#defineSAO_PROTOCOL_ADD_FRIEND 14 //添加好友
#defineSAO_PROTOCOL_DELETE_FRIEND 15 //删除好友
#defineSAO_PROTOCOL_RECV_ADD_FRIEND 16 //接收到添加好友請求
#defineSAO_PROTOCOL_USER_OFFLINE 17 //使用者不線上
#defineSAO_PROTOCOL_ADD_FRIEND_REQUEST_OK 18 //成功發送添加好友請求
#defineSAO_PROTOCOL_AGREE_ADD 19 //同意添加好友
#defineSAO_PROTOCOL_ALREADY_FRIEND 20 //已經是好友
#defineSAO_PROTOCOL_MOVE_FRIEND 21 //移動好友
#defineSAO_PROTOCOL_RENAME_REMARKS 22 //重命名好友備注