HLW聊天室-使用Linux C網路程式設計技術開發的多人聊天工具
安裝部署
git clone https://github.com/fujie-xiyou/chat_room.git
然後將chat_room.sql
匯入到你的資料庫中,並修改config.json
中的資料庫資訊最後./chat_room_srv
沒有報錯的話伺服器就啟動成功了
然後在config.json中修改伺服器位址最後./chat_room_cli
請先註冊一個帳號
示範影片
聊天室視訊演示
項目概述
- 本專案是一個使用Linux C網路程式設計技術開發的字元介面聊天室,基本功能有,使用者註冊登錄,新增好友,私聊,建立群聊,邀請好友加入群組聊,群聊,聊天記錄查看,檔案傳送等。
專案設計
- 本專案基於C/S模型設計,分為客戶端和伺服器端兩個部分,客戶端直接連接到伺服器,與伺服器雙向交換數據,伺服器端用於接收客戶端發送的訊息,並轉發給目標用戶,所有資料的持久化工作也由伺服器端完成。
- 專案程式碼採用分層的想法進行設計,客戶端由介面層和業務邏輯層(請求層)構成,伺服器端由業務邏輯層和持久化層構成,程式碼結構如圖:
- 資料庫設計
- 本計畫開發時尚未系統學過資料庫相關課程,但後來檢視本計畫資料庫設計,居然是符合BC範式的。
- 專案資料庫部分示例如圖所示
- 檔案傳輸功能設計由於本專案客戶端與伺服器端採用JSON進行資料交互,對於檔案傳輸需要做特殊處理,因此在此簡單介紹一下檔案傳輸的處理方式,先上圖:
- 如圖在當使用者輸入要傳送的檔案名稱後,系統使用open()系統呼叫開啟文件,然後使用read()系統呼叫讀取指定位元組的文件內容,將read的傳回值記錄在資料包的size字段,然後將讀取到的文件內容使用base6 4轉碼,將得到的結果記錄在資料包的data欄位中,然後將資料包發給接收方,再根據read回傳值的大小判斷檔案是否全部傳送完成,如果read傳回值小於read的大小參數,則關閉文件,否則繼續read轉碼發送。
- 接收方收到檔案包後,將data中的資料解碼為二進制,然後根據size的值將儲存data的轉碼結果的buff中的資料追加寫入檔案中。