日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

qt linux 网络聊天室,QT tcp网络聊天室群聊的实现

發(fā)布時(shí)間:2024/8/1 linux 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt linux 网络聊天室,QT tcp网络聊天室群聊的实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

tcp編程通過分成 服務(wù)器 端與客戶端

在QT里, tcp編程需用到兩個(gè)類: QTcpServer, QTcpSocket

服務(wù)器端:

//1. 創(chuàng)建一個(gè)QTcpServer對象

QTcpServer *server = new QTcpServer;

//2. 調(diào)用對象的listen函數(shù)成員進(jìn)行綁定地址與端口號(hào), 并監(jiān)聽端口

server->listen(QHostAddress::Any, 9999); // 綁定端口號(hào)9999, 成功返回true, 失敗返回false

// 3. 連接對象的newConnection信號(hào)到一個(gè)槽函數(shù),用于處理客戶端的連接。

connect(server, SIGNAL(newConnection()), this, SLOT(new_client())); //當(dāng)有客戶端連接時(shí),對象會(huì)發(fā)出newConnection信號(hào),客戶端的連接處理就在觸發(fā)的槽函數(shù)new_client里處理了。

// 4. 在處理客戶端連接的槽函數(shù)new_client里處理連接. 每個(gè)客戶端連接上來后,在服務(wù)器端就會(huì)有一個(gè)QTcpSocket對象對一個(gè)客戶端通信使用,如多個(gè)客戶端連接上來,則會(huì)有多個(gè)QTcpSocket對象.

QTcpSocket *client;

client = server->nextPendingConnection(); //處理客戶端連接, 調(diào)用此處理函數(shù)后,會(huì)得到一個(gè)QTcpSocket對象的地址,此對象專用于這個(gè)連接上來的客戶端通信使用。

// QTcpSocket對象在服務(wù)器端用于與客戶端通信使用,當(dāng)客戶端發(fā)數(shù)據(jù)到服務(wù)器端時(shí),它會(huì)發(fā)出信號(hào)readyRead, 通知接收客戶端的數(shù)據(jù). 當(dāng)客戶端斷開連接時(shí),會(huì)發(fā)出disconnected信號(hào),通知客戶端已斷線.發(fā)送數(shù)據(jù)則調(diào)用對象的write函數(shù)即可.

//連接信號(hào),做相應(yīng)的處理

connect(client, SIGNAL(readyRead()), this, SLOT(tcp_read())); // tcp_read槽函數(shù)用于接收客戶端的數(shù)據(jù), 在槽函數(shù)里調(diào)用QTcpSocket對象的read函數(shù)即可.

connect(client, SIGNAL(disconnected()), this, SLOT(lost_client())); // lost_client槽函數(shù)用于處理客戶端斷開連接

客戶端:

// 1. 創(chuàng)建QTcpSocket對象

QTcpSocket *tcp = new QtcpSocket;

// 2. 連接服務(wù)器端的IP地址與端口號(hào), 連接成功會(huì)發(fā)出connected信號(hào)。也可以直接調(diào)用waitForConnected等待連接的結(jié)果。

tcp->connectToHost("192.168.250.250", 9999);

// 3. 調(diào)用對象的read/write函數(shù)即可與服務(wù)器端進(jìn)行收發(fā)數(shù)據(jù)了。當(dāng)服務(wù)器端有發(fā)數(shù)據(jù)過來時(shí),會(huì)發(fā)出readyRead信號(hào),在連接此信號(hào)的槽函數(shù)里接收數(shù)據(jù)即可.

網(wǎng)絡(luò)聊天室的技術(shù)要點(diǎn):

因在服務(wù)器端每個(gè)客戶端連接,都會(huì)產(chǎn)生一個(gè)QTcpSocket對象用于與對應(yīng)的客戶端通信。而客戶端個(gè)數(shù)是不確定的,所以可以用 QList

的鏈表存放每個(gè)對象的地址。

群發(fā)的實(shí)現(xiàn):

接收到客戶端發(fā)過來的內(nèi)容后,遍歷鏈表,給每個(gè)客戶端發(fā)送同一份內(nèi)容即可。

總結(jié)

以上是生活随笔為你收集整理的qt linux 网络聊天室,QT tcp网络聊天室群聊的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。