網路聊天室專案說明
專案的目的和意義
該聊天室專案為利用linux下c語言網路程式設計相關知識,採用server/client,即伺服器與客戶端的基本框架實現。整個專案涉及了socket套接字,執行緒,嵌入式資料庫sqlite3,select模型等多個知識模組,伺服器整體採用select模型,並不斷監聽客戶端,客戶端中起乙個執行緒,用來實時接受伺服器傳送的資訊。
該聊天室專案可模擬當今的聊天工具中的各個功能,實現最基本的互相傳送資訊,**訊息,登陸註冊等功能。完成該專案可很大的提高我們初學者的程式設計能力,以及面對出現的各種bug的應對解決能力,是乙個提公升自我的很好途徑。
專案的需求分析
1.聊天室支援連線多個客戶端,採用select模型
2.客戶端與伺服器的連線,接受資訊
3.賬號網名的註冊,登入,並存檔
5.伺服器與客戶端的通訊,實現資訊**(私聊,群聊)
6.實現管理員許可權,可進行禁言,踢人等功能
7.傳送表情,常用語句
8.每個使用者都建立各自的聊天記錄檔案,伺服器儲存所以使用者的聊天記錄
專案的技術方案設計
伺服器socket和select
首先建立socket,用bind進行繫結後,用listen進行對客戶端的監聽。在乙個while(1)迴圈中,採用select對客戶端進行操作,將所以檔案描述符放到readfd中,如果是有新的客戶端要進行連線,即sockfd有動靜,就開始accept操作,將新的fd放到readfd中,並修改maxfd的值;如果是其他已經存在的fd有動作,則進行聊天室相關的功能操作。
管理員功能
在每個客戶端設定乙個管理員標誌位,初始化為0,若選擇註冊會員功能,則將其置一,否在在選擇禁言踢人等功能時顯示無許可權。禁言時輸入禁言物件,伺服器**禁言訊息給該使用者,該使用者的不可發言標誌位置一,則不能進行私聊群聊。踢人時輸入網名,伺服器向其傳送退出訊號,則該客戶端退出聊天室,及程序被終止。
傳送表情,常用語
設定特有的識別符號代表相應表情和常用語句,之後進行私聊操作,傳送相應的表情和常用語。
儲存聊天記錄
在客戶端的私聊群聊傳送表情常用語功能處,傳送之後將其內容和傳送者傳送物件的網名存放到相應使用者的資料庫表中,在接受端同樣進行該操作,即可儲存使用者的聊天記錄。在伺服器端,進行**操作時,將傳送者傳送物件網名和聊天內容存放到系統的聊天記錄檔案中,便實現了伺服器端的聊天記錄儲存。
四、遇到的問題與解決途徑及方法
1.重複登入的問題
問題:由於每個id登陸後,在接受訊息傳送訊息時,都會開啟用其id命名的資料庫表,如果同時登入了乙個賬號,在接受傳送訊息時,兩個程序會同時開啟乙個資料庫表,這時就會exec函式就會出錯,程序退出。
退出時出現的問題
問題:在乙個客戶端退出時,如果沒有相應的操作,在伺服器端該客戶端的相關資訊還是存在的,在其他使用者聊天檢視好友時會出現問題,並且此時若有其他客戶端連線,所產生的fd也會出錯,所以在退出時一定要有相關操作。程式異常退出時,如遇到ctrl+c訊號,也應有相應操作。
maxfd的改變問題
問題:在同時連線了幾個客戶端後,通訊都正常,但是關閉中間的客戶端時,會出現之後開啟的客戶端無法與伺服器通訊的現象。
解決方法:在除錯了多次之後,發現問題出在maxfd的改變上,maxfd必須要比select中的那個readfd中的最大的成員的fd的數值要大,如果小了,就會出線上述問題,造成之後的fd無法通訊。在每次有客戶端退出時,一定要將fd陣列中的所以fd遍歷一遍,找到最大的再賦值給maxfd,一定要確保maxfd足夠大才可以。
功能選擇輸入時輸入出錯的問題
問題:由於各個功能的選擇標號是int型,正常應該輸入乙個數字,但如果隨便輸入各種字元的話就會出錯,並且由於緩衝區的問題,會繼續影響之後的功能選擇
解決方法:分兩步,scanf這個函式也是有返回值的,如果沒有獲取成功會返回0,可以通過這個來判斷是否獲取到了int型資料,如果失敗了,就需要進行清除緩衝區,查詢了資料,可以用while((ch = getchar()) != eof && ch != 『\n』);來進行清除緩衝區。
C語言聊天室專案說明書
網路聊天室專案說明 該聊天室專案為利用linux下c語言網路程式設計相關知識,採用server client,即伺服器與客戶端的基本框架實現。整個專案涉及了socket套接字,執行緒,嵌入式資料庫sqlite3,select模型等多個知識模組,伺服器整體採用select模型,並不斷監聽客戶端,客戶端...
聊天室專案
網路程式設計專案要求 一 實現目標 乙個在 linux 下可以使用的聊天軟體,要求至少實現如下功能 1.採用 client server 架構 2.client a 登陸聊天伺服器前,需要註冊自己的 id 和密碼 3.註冊成功後,client a 就可以通過自己的 id 和密碼登陸聊天伺服器 4.多...
聊天室專案
聊天室標頭檔案,定義所需變數 ifndef tcp net socket h define tcp net socket h include include include include include include include include include include include...