網路群聊系統

2021-08-07 13:03:21 字數 2107 閱讀 3518

(一)

編寫視窗類window,用ncurses庫.。

window介面:

1.create_newwin(int,int,int,int)//建立新視窗並加邊框

2.create_output()//建立輸出聊天內容的視窗

3.create_input()//建立輸入視窗

4.create_header()//建立標題視窗,顯示歡迎資訊。

5.create_friends_list()//建立好友列表視窗

6.put_str_to_win(window* w,int y,int x,string& msg)//將msg輸出到視窗w

7.get_str_from_win(window* w,string& out)//將視窗w中的內容輸入至out中

8.clear_win_line(window* w,int,int)//清除視窗w.

(二)

編寫udp_client類,私有資料:ip(伺服器ip),port(伺服器端口號),sock。

介面:init_client()設定socket;

recv_msg(string&out)從伺服器讀取資料並存放在out中;

send_msg(string& in)將in傳送給伺服器(通過ip和port);

client主程式:

1.定義了結構體net_window_t,*net_window_p;結構體包含:udp_client *cp和window* wp;

2.好友列表:vectorfd;name,school;都是全域性變數

2.定義了乙個udp_client類物件client和乙個指向udp_client物件的指標*qclient;用命令列引數argv[1]和argv[2]構造client

3.定義了乙個window類win,定義了net_window_t結構體nw,nw.cp=&client,nw.wp=&win;

4.訊號捕捉函式signal(sigalrm,quit);

5.主線程建立3個執行緒分別呼叫show_header,show_output_fd,show_input;

處理函式:

1.quit:當本客戶端捕獲到sigalrm時,呼叫quit函式將本使用者的資訊用json進行序列化後發給客戶端,然後關閉視窗,程序結束;

2.void* show_header(void* arg);顯示標題資訊;

3.addr_user(string&)、del_user(string&)//從fd(全域性變數)中刪除、新增使用者

4.void* show_output_fd(void* arg)//顯示好友列表和聊天資訊視窗

5.void* show_input//顯示輸入視窗

(三)comm模組:基於jsoncpp,提供基本資料序列化和反序列化功能,以及提供各種server和client公共部分模組。

base-json.h,base-json.cpp,data.h,data.cpp

data類資料成員:nick_name,school,msg,cmd;介面:str_to_serialize()和serialize_to_str()資料系列和反序列化;

(四)生產者、消費者模組(pool),本專案採用單生產者單消費者模型,採用posix無名訊號量。快取區用vector實現環形佇列緩衝區。

get_data(string&);//消費,從緩衝區取資料

put_data(string &)//生產,向緩衝區存資料

(五)udp_server模組:

介面:1.init_server()//按伺服器ip和埠號繫結udp套接字

4.recv_msg(string &out)//從套接字讀取資料存放到out中並將傳送者資訊儲存到peer中。將out放至緩衝區中,呼叫serialize_to_str(out)將out反序列化,根據結果新增或者刪除使用者peer;

5.send_msg(const string& in,struct sockaddr_in &peer,const socklen_t &len)//將in通過sendto傳送給使用者peer;

伺服器主程式:主線程不斷地從套接字讀取資料寫入資料池,子執行緒呼叫brocast向客戶傳送資料。

(六)log模組:錯誤資訊處理模組

網路群聊系統

1 網路群聊系統簡介 簡單來說,這個聊天系統是參照 linux高效能伺服器程式設計 中有個簡單的聊天系統實現的群聊功能。每個客戶端負責傳送和接收資料,還負責資料的序列化和反序列化。2 網路群聊系統背景知識 1 在linux作業系統下實現,本人用的是centos 6.5 2 熟悉linux的開發環境,...

網路程式設計之群聊

群聊客戶端 importsocket,threading 建立個服務端 server socket.socket socket.af inet,socket.sock stream 繫結伺服器的ip和埠 server.bind 192.168.0.1 8000 設定最大掛起連線數5 server.l...

QT學習 基於TCP IP的簡易群聊系統

查閱一些資料,我自己試著寫了乙個簡單的聊天系統。一 建立套接字進行監聽 建立套接字 socket server new qtcpserver this 監聽,埠號 9999 bind listen bool isok server listen qhostaddress any,9999 監聽失敗 ...