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网络聊天室群聊的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenGL三维小球碰撞实现方法(glm
- 下一篇: ABAP常用表描述