QT聊天軟體

2021-08-14 09:02:38 字數 2769 閱讀 7038

該程式實現的是每個使用者登入既是客戶端又是伺服器端,這就需要看你站在哪個角度看問題了。簡單的說,當使用者傳送資訊給別人時就是客戶端,當接收別人的資訊是就可以看做是伺服器端。

下面分伺服器端和客戶端2部分來介紹。

伺服器端:建立乙個udp socket並繫結在固定埠後,用訊號與槽的方式進行監聽是否有資料來臨。如果用,接收其資料並分析資料的訊息型別,如果訊息是新使用者登入則更新使用者列表並在聊天顯示視窗中新增新使用者上線通知;同理,如果是使用者下線,則在使用者列表中刪除該使用者且在聊天顯示視窗中顯示下線通知;如果是聊天訊息,則接收該訊息並且在視窗中顯示。其流程圖如下:

客戶端:首先當客戶端登入時,獲取本機的使用者名稱,計算機名和ip位址,並廣播給區域網的伺服器更新使用者列表。然後當客戶端需要傳送資訊時,則在聊天輸入欄中輸入資訊並按傳送鍵傳送聊天內容,當然於此同時也廣播本地系統的各種資訊。其流程圖如下:

程式主要**和注釋如下:

widget.h:

#ifndef widget_h

#define widget_h

#include class qudpsocket;

namespace ui

// 列舉變數標誌資訊的型別,分別為訊息,新使用者加入,使用者退出,檔名,拒絕接受檔案

enum messagetype;

class widget : public qwidget

;#endif // widget_h

widget.cpp:

#include "widget.h"

#include "ui_widget.h"

#include #include #include #include #include #include #include widget::widget(qwidget *parent) :

qwidget(parent),

ui(new ui::widget)

widget::~widget()

// 使用udp廣播傳送資訊,messagetype是指頭檔案中的列舉資料型別

//sendmessage即把本機的主機名,使用者名稱+(訊息內容後ip位址)廣播出去

void widget::sendmessage(messagetype type, qstring serveraddress)

out << address << getmessage();//將ip位址和得到的訊息內容輸入out資料流

ui->messagebrowser->verticalscrollbar() //返回垂直條

->setvalue(ui->messagebrowser->verticalscrollbar()->maximum());//設定垂直滑動條的最大值

break;

case newparticipant :

out << address; //為什麼此時只是輸出位址這一項呢?因為此時不需要傳遞聊天內容

break;

case participantleft :

break;

case filename :

break;

case refuse :

break;

}//乙個udpsocket已經於乙個埠bind在一起了,這裡的data是out流中的data,最多可以傳送8192個位元組,但是建議不要超過

//512個位元組,因為這樣雖然可以傳送成功,但是這些資料需要在ip層分組,qhostaddress::broadcast是指傳送資料的目的位址

//這裡為本機所在位址的廣播組內所有機器,即區域網廣播傳送

udpsocket->writedatagram(data,data.length(),qhostaddress::broadcast, port);//將data中的資料傳送

}// 接收udp資訊

void widget::processpendingdatagrams()

}}// 處理新使用者加入

void widget::newparticipant(qstring username, qstring localhostname, qstring ipaddress)

}// 處理使用者離開

void widget::participantleft(qstring username, qstring localhostname, qstring time)

// 獲取ip位址,獲取本機ip位址(其協議為ipv4的ip位址)

qstring widget::getip()

return 0;

}// 獲取使用者名稱

qstring widget::getusername()}}

return "unknown";

}// 獲得要傳送的訊息

qstring widget::getmessage()

// 傳送訊息

void widget::on_sendbutton_clicked()

main:

#include //處理不同語言編碼的類

int main(int argc, char *argv)

QT 聊天程式

一.聊天程式 qt實現的介面 網路的資料通訊 伺服器端 建立使用者ui 建立伺服器socket 接受客戶連線 為每個各戶建立執行緒處理客戶資料 分析設計的一般規律 1.用例 2.事件流 3.找物件,並且抽象類 4.設計類本身 5.設計類關係 泛化關係,關聯關係 6.設計模式優化設計 設計介面 qma...

Qt的聊天氣泡

採用了qlistwidget作為聊天記錄視窗,而每一子項都為qwidget,可以在qwidget繪製自己新增的內容,比如訊息內容 頭像 名字等,主要可以顯示動態gif表情。效果圖 右邊的影象和內容顯示 elseif this show type show type time 時間顯示 void ch...

聊天軟體的發展

聊天軟體發展史 目前,國內最為流行的即時通訊軟體是oicq 簡稱qq 它以良好的中文介面和不斷增強的功能形成了一定的qq網路文化。messenger雖出道較晚,但依託微軟的強大背景,實力也不可小視。作為windows xp的一部分,messenger 整合了作業系統的許多功能,如多種形式的聊天選擇 ...