欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

C++項目推薦,QT項目推薦-仿微信聊天,QT客戶端+Linux C++后端

1 項目簡介

采用QT6制作客戶端,Linux C++實現后端。為用戶提供了一個即時聊天平臺。

項目地址:https://gitee.com/voice-of-sentiment/chat-forge.git

視頻講解:C++項目推薦,QT項目推薦-仿微信聊天,QT客戶端+Linux C++后端

2 Linux C++后端編譯和運行

git clone    https://gitee.com/voice-of-sentiment/chat-forge.git
cd chat-forge/server/thirdparty
git clone https://gitee.com/NEU-lab/SQLiteCpp.git
#回到chat-forge/server目錄
cd ..
cd build
rm -rf *
#重新cmake 編譯debug方式
cmake -DCMAKE_BUILD_TYPE=Debug ..
make -j4

編譯成功后產生server執(zhí)行文件。

運行:

./server

默認監(jiān)聽端口為:8888

3 QT客戶端編譯和運行

編譯環(huán)境:QT6.5 MinGW 64-bit

運行代碼前修改服務器地址的ip和端口。

注冊賬號要用數字:

4 Linux后端框架快速分析

在以下函數斷點:

  • main
  • accept
  • recv
  • send

main函數位置

main函數入口位置

(gdb) b main
Note: breakpoint 1 also set at pc 0x5555555782a2.
Breakpoint 4 at 0x5555555782a2: file /home/lqf/linux/reactor/chat-forge/server/main.cpp, line 13.

accept監(jiān)聽位置

#0  __libc_accept (fd=4, addr=..., len=0x7fffffffde78) at ../sysdeps/unix/sysv/linux/accept.c:24
#1  0x00005555555784f1 in main (argc=1, argv=0x7fffffffdfe8) at /home/lqf/linux/reactor/chat-forge/server/main.cpp:88

recv調用位置

#0  __libc_recv (fd=6, buf=0x7ffff71a0be4, len=4, flags=0) at ../sysdeps/unix/sysv/linux/recv.c:24
#1   in Session::recvMsg[abi:cxx11]() (this=) at /home/lqf/linux/reactor/chat-forge/server/session.cpp:301
#2   in taskThread (clientFd=6) at /home/lqf/linux/reactor/chat-forge/server/chatTask.cpp:13
#3   in std::__invoke_impl<void, void (*)(int), int> (__f=@0x55555570cd80:  <taskThread(int)>) at /usr/include/c++/10/bits/invoke.h:60
#4   in std::__invoke<void (*)(int), int> (__fn=@0x55555570cd80: 0x55555557455f <taskThread(int)>) at /usr/include/c++/10/bits/invoke.h:95
#5   in std::thread::_Invoker<std::tuple<void (*)(int), int> >::_M_invoke<0ul, 1ul> (this=) at /usr/include/c++/10/thread:264
#6   in std::thread::_Invoker<std::tuple<void (*)(int), int> >::operator() (this=) at /usr/include/c++/10/thread:271
#7   in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(int), int> > >::_M_run (this=) at /usr/include/c++/10/thread:215
#8   in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#9   in start_thread (arg=<optimized out>) at pthread_create.c:477
#10  in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

核心:

taskThread

-> Session::recvMsg 后續(xù)重點看Session類。

Session::handleMsg核心函數

通過分析recvMsg 找到調用 Session::handleMsg,從名字上看他就是用來處理消息的。

```

int Session::handleMsg(json msg)
{
    usleep(1000);
    int cmd = msg.at("cmd");
    //LOGINFO("handleMsg command:%s\n", cmd.c_str());
    switch (cmd)
    {
         case cmd_regist:  //注冊消息
            {
                ...
            break;
            }   
        
        case cmd_login: //登錄消息
        {
            ...
           break;
        }
        case cmd_friend_search: //好友查找消息
        {
            ...
            break;
        }
        case cmd_add_friend_request:    //添加好友請求
        {
            ...
        }
        break;
        case cmd_add_friend_response:  //添加好友響應
        {
           ...
            
            break;
        }
        break;
        case cmd_friend_list:       //好友列表
        {
            ...
            break;
        }
        case cmd_friend_chat:       //好友聊天
        {...
            break;
        }
        
        case cmd_group_create:  //群創(chuàng)建
        {
          ...
            break;
        }
        
        case cmd_group_search:  //群搜索
        {
           ...
            break;
        }
        
        case cmd_group_join_request:    //加入群
        {
           ...
            break;
        }
        case cmd_group_join_response:   //加群響應
        {
           ...
            break;
        }
        
        case cmd_group_list:        //群列表
        {
            int account = msg.at("account");
            CommandHandler::GroupList(account, this);
            break;
        }
        
        case cmd_group_chat:        //群聊天
        {
          ...
            break;
        }
        case cmd_group_member_list:     //群成員
        {
            ...
            break;
        }
        
        case cmd_group_member_add:  //群增加成員
        {
            ...
            break;
        }
        case cmd_group_member_del:      //群刪除成員
        {
          ...
            break;
        }
        case cmd_set_icon:  //設置頭像
        {
           ...
            break;
        }
        
    }
    return 0;
}

send函數位置

send函數調用,在處理完消息后應答客戶端時調用

#0  __libc_send (fd=6, buf=0x7fffe8001180, len=78, flags=0) at ../sysdeps/unix/sysv/linux/send.c:24
#1  0x000055555557c66a in Session::sendMsg (this=, j=...) at /home/lqf/linux/reactor/chat-forge/server/session.cpp:244
#2  0x0000555555562e49 in CommandHandler::Login (account=110, password="1234", session=) at /home/lqf/linux/reactor/chat-forge/server/CommandHandler.cpp:65
#3  0x000055555557b088 in Session::handleMsg (this=, msg=...) at /home/lqf/linux/reactor/chat-forge/server/session.cpp:58
#4  0x000055555557ccb9 in Session::recvMsg[abi:cxx11]() (this=) at /home/lqf/linux/reactor/chat-forge/server/session.cpp:334
#5  0x00005555555745d6 in taskThread (clientFd=6) at /home/lqf/linux/reactor/chat-forge/server/chatTask.cpp:13

消息協議設計

消息格式:

  • [0, 3] 前4個字節(jié)封裝了后續(xù)json字符串的長度length
  • [4, length+4-1].

命令類型

// 命令枚舉
enum commands
{
    cmd_regist = 0,
    cmd_login,
    cmd_logout,
    cmd_friend_search,
    cmd_add_friend_request,
    cmd_add_friend_response,
    cmd_friend_list,
    cmd_friend_chat,

    cmd_group_create,
    cmd_group_search,
    cmd_group_join_request,
    cmd_group_join_response,
    cmd_group_list,
    cmd_group_chat,
    cmd_group_member_list,
    cmd_group_member_add,
    cmd_group_member_del,
    cmd_set_icon
};

消息是通過json做序列化:

通過觀察: rsvmsg = 分析服務器接收數據的信息,比如:

  • {"account":"120","cmd":1,"password":"1234"} ,對應為cmd_login,登錄請求
    • {"account":120,"cmd":6},對應為cmd_friend_list,請求獲取好友列表

    通過觀察 send: 分析服務器發(fā)送數據的信息,比如:

  • {"cmd":1,"info":["lys","hello",":/Icons/src/QQIcon/icon.jpg"],"res":"yes"} ,對應cmd_login的響應
  • {"cmd":6,"count":1,"msglist":[{"account":110,"icon":":/Icons/src/QQIcon/icon.jpg","name":"lqf","online":1,"sig":"hello"}]},對應cmd_friend_list請求獲取好友列表的響應,好友在msglist里。

核心類Session

每個客戶端綁定一個session,綁定了socket fd.

#c++##校招過來人的經驗分享##校招##簡歷中的項目經歷要怎么寫##我的成功項目解析#
全部評論

相關推薦

04-17 22:38
已編輯
電子科技大學 C++
詩人和詩在兜圈:感謝牛友們的陪伴,大半個月終于得償所愿了
查看21道真題和解析
點贊 評論 收藏
分享
評論
4
14
分享

創(chuàng)作者周榜

更多
??途W
??推髽I(yè)服務