QT中的tcp一個服務器處理多個客戶端

客戶端:

我們先在頭文件中
在這裏插入圖片描述
在頭文件中添加#include <QTcpSocket>
在這裏插入圖片描述
在這裏插入圖片描述
聲明一個空的QTcpSocket *tcpsocket=nullptr;

我們在.cpp文件的初始化位置new 一個QTcpSocket()對象;

 tcpsocket = new QTcpSocket();

通過以下代碼指定需要連接的服務器的IP和端口

tcpsocket->connectToHost(ip, 9999);

進行連接並等待,這裏是出於堵塞狀態,連接成功則釋放,如果連接不成功則等待5s的等待時間
如果不寫參數默認應該是等待3S,參數的單位是ms

  if( tcpsocket->waitForConnected(5000)){
//如果連接成功可進行的操作

} 

我們可以通過if(tcpsocket->state() == QTcpSocket::ConnectedState)來判斷用戶是否已經連接

服務器端:

在頭文件中的操作:

在這裏插入圖片描述

#include "server.h"

Server::Server(quint16 port,QObject *parent) : QObject(parent)
{
    // 定義一個server
    server = new QTcpServer();
    // 監聽任意地址訪問port
    server->listen(QHostAddress::Any,port);
    // 綁定一個信號槽,newConnection被觸發,將調用connect函數
    connect(server,&QTcpServer::newConnection,this,&Server::connnect);
}

// 接收新上線的socket
void Server::connnect(){ 
    QTcpSocket *socket = server->nextPendingConnection();//通過這句話我們將接收到的客戶端進行識別,實現多客戶端連接
    TcpClientSocket *tmpsocket = new TcpClientSocket(socket);
    qDebug()<<tmpsocket;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章