從0實現基於Linux socket聊天室-實現聊天室的公聊、私聊功能-4


前面文章鏈接如下:

從0實現基於Linux socket聊天室-多線程服務器模型-1

從0實現基於Linux socket聊天室-多線程服務器一個很隱晦的錯誤-2

從0實現基於Linux socket聊天室-實現聊天室的登錄、注冊功能-3

上文中,我們基於多線程的框架,實現了注冊和登錄的功能,這一章,我們在此基礎上來實現公聊、私聊、顯示在線用戶列表功能。

公聊

接着上幾篇的流程圖我們詳細講解公聊流程圖如下:

在這里插入圖片描述
如上圖所示,我們去掉了網絡連接和客戶端登錄、注冊等功能,直接進入聊天的流程:

  1. 客戶端從菜單選擇公聊功能;
  2. 輸入要聊天信息;
  3. 回車發送聊天信息;
  4. 服務器的子線程收到公聊數據之后,進入公聊流程;
  5. 查找所有在線用戶,向所有的在線用戶發送該公聊信息;
  6. 客戶端進入聊天后會創建一個子線程,該子線程會循環接收所有服務器發送的數據信息。

私聊

在這里插入圖片描述
如上圖所示:

  1. 客戶端從菜單選擇私聊功能;
  2. 輸入要聊天的對象和聊天信息;
  3. 發送聊天信息給服務器;
  4. 服務器的子線程收到公聊數據之后,進入公聊流程;
  5. 查找所有在線用戶,向所有的在線用戶發送該公聊信息;
  6. 客戶端子線程會循環接收所有服務器發送的數據信息。

顯示在線用戶

在這里插入圖片描述
如上圖所示:

  1. 客戶端從菜單選擇顯示在線用戶功能;
  2. 封裝顯示在線用戶數據包,並發送該數據包給服務器;
  3. 服務器收到數據包后,進入顯示在線用戶功能模塊;
  4. 檢查在線用戶數據信息數據庫,將在線用戶【fd不為-1】名稱封裝到數據包中,一次只填充一個,stat字段填充ONLINEUSER_OK;
  5. 所有用戶發送完畢,補充一個數據包,stat填充ONLINEUSER_OVER;
  6. 收到服務器發送的在線用戶數據包后,客戶端子線程進入顯示在線用戶子模塊;提取數據包中在線用戶名字並打印,判斷該數據包stat是否為 ONLINEUSER_OVER,如果不是則繼續接收下一個數據包,如果是,則提示用戶顯示完畢。

運行截圖

現在預設:
客戶A:yikoulinux
客戶B:yikoupeng

公聊

客戶B發公聊:

客戶A收到信息:

服務器log:

私聊

客戶B私發信息給A:

客戶A收到的消息:

顯示在線用戶信息

完整版代碼
請自行下載:
請自行下載:
鏈接:https://pan.baidu.com/s/1tVqJ59AUTkGBxuBBAVCsEQ
提取碼:81v3

更多linux相關知識,請關注公眾號 一口Linux 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM