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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

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

tcp編程通過分成 服務器 端與客戶端

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

服務器端:

//1. 創建一個QTcpServer對象

QTcpServer *server = new QTcpServer;

//2. 調用對象的listen函數成員進行綁定地址與端口號, 并監聽端口

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

// 3. 連接對象的newConnection信號到一個槽函數,用于處理客戶端的連接。

connect(server, SIGNAL(newConnection()), this, SLOT(new_client())); //當有客戶端連接時,對象會發出newConnection信號,客戶端的連接處理就在觸發的槽函數new_client里處理了。

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

QTcpSocket *client;

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

// QTcpSocket對象在服務器端用于與客戶端通信使用,當客戶端發數據到服務器端時,它會發出信號readyRead, 通知接收客戶端的數據. 當客戶端斷開連接時,會發出disconnected信號,通知客戶端已斷線.發送數據則調用對象的write函數即可.

//連接信號,做相應的處理

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

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

客戶端:

// 1. 創建QTcpSocket對象

QTcpSocket *tcp = new QtcpSocket;

// 2. 連接服務器端的IP地址與端口號, 連接成功會發出connected信號。也可以直接調用waitForConnected等待連接的結果。

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

// 3. 調用對象的read/write函數即可與服務器端進行收發數據了。當服務器端有發數據過來時,會發出readyRead信號,在連接此信號的槽函數里接收數據即可.

網絡聊天室的技術要點:

因在服務器端每個客戶端連接,都會產生一個QTcpSocket對象用于與對應的客戶端通信。而客戶端個數是不確定的,所以可以用 QList

的鏈表存放每個對象的地址。

群發的實現:

接收到客戶端發過來的內容后,遍歷鏈表,給每個客戶端發送同一份內容即可。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。