亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于Qt的TCP怎么實現通信

發布時間:2022-08-23 10:22:10 來源:億速云 閱讀:139 作者:iii 欄目:開發技術

這篇文章主要介紹了基于Qt的TCP怎么實現通信的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇基于Qt的TCP怎么實現通信文章都會有所收獲,下面我們一起來看看吧。

一、tcp介紹

TCP是面向連接的可靠傳輸的協議,協議規定通信的雙方是服務端和客戶端的兩個角色:
服務端:負責監聽網絡端口,等待客戶端的連接,用連接的socket完成信息的交互;
客戶端:負責每次連接的發起,建立連接后才可以進行通信;

二、界面設計

服務器

基于Qt的TCP怎么實現通信

客戶端

基于Qt的TCP怎么實現通信

三、具體程序設計

(1)服務器端設計

1、建立一個工程,工程名為tcpserver,類名為server。在.pro文件中加入如下代碼并保存。

QT       += network

2、進入server.h,添加類的前置聲明

class QTcpServer;   //QTcpServer類的前置聲明
class QTcpSocket;   //QTcpSocket類的前置聲明

添加私有對象指針

QTcpServer *tcpServer;          //添加QTcpServer私有對象指針
QTcpSocket *socket;             //添加QTcpSocket私有對象指針

添加私有槽聲明

 void tcpServer_connect();       //連接函數
 void read_data();               //讀取從client發來的信息
 void disconnected();            //斷開連接
 void on_sendButton_clicked();   //發送數據函數

3、轉到server.cpp文件中

添加頭文件#include,然后編寫構造函數構造函數

Server::Server(QWidget *parent) :            //構造函數
    QDialog(parent),
    ui(new Ui::Server)
{
    ui->setupUi(this);
    tcpServer = new QTcpServer(this);                                             //創建對象
    if(!tcpServer->listen(QHostAddress::LocalHost,6666))                          //調用listen監聽到來的連接,一旦有客戶端連接到服務器,就發射newConnection信號
    {
        qDebug()<<tcpServer->errorString();
        close();
    }
    ui->sendButton->setEnabled(false);                                            // 設置按鈕初始值值為false狀態,即不可用
    connect(tcpServer,&QTcpServer::newConnection,this,&Server::tcpServer_connect);//將newConnection信號與槽函數連接起來
}

槽函數

//發送數據槽函數
void Server::on_sendButton_clicked()
{
    socket->write(ui->sendText->toPlainText().toLocal8Bit());      //通過write函數發送數據
    socket->flush();
    ui->sendText->clear();
}

//確認連接
void Server::tcpServer_connect()
{
    socket=tcpServer->nextPendingConnection();
    QObject::connect(socket,&QTcpSocket::readyRead,this,&Server::read_data);    //當接收緩沖區有信號到來時,產生readyRead信號
    QObject::connect(socket,&QTcpSocket::disconnected,this,&Server::disconnected);//當接收到dinconnected信號時,執行disconnected函數
    ui->sendButton->setEnabled(true);          //按鈕設置為有效
    ui->label->setText(tr("連接成功!"));
}

//讀取客戶端發送的數據
void Server::read_data()
{
    QByteArray buffer=socket->readAll();           //讀取的數據放入QByteArray對象中
    ui->recText->append(QString::fromLocal8Bit(buffer));       //將數據顯示出來
}

void Server::disconnected()
{
    ui->sendButton->setEnabled(false);        //斷開連接后按鈕值設置為無效
}

(2)客戶端設計

1、建立一個工程,工程名為tcpclient,類名為client。在.pro文件中加入如下代碼并保存。

QT       += network

2、進入client.h,添加類的前置聲明

class QTcpSocket;     //QTcpSocket類的前置聲明

定義一個套接字對象指針

QTcpSocket *tcpSocket;       //定義一個套接字對象指針

添加私有槽函數聲明

 void readData();                 //讀取函數
 void discon();                   //斷開連接
 void on_connectButton_clicked(); //連接按鈕槽函數
 void on_sendButton_clicked();    //發送按鈕槽函數

3、轉到client.cpp,

添加頭文件#include,并編寫構造函數

Client::Client(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Client)
{
    ui->setupUi(this);
    tcpSocket = new QTcpSocket(this);          //定義套接字對象

    //關聯信號到自定義的槽上
    QObject::connect(tcpSocket,&QTcpSocket::readyRead,this,&Client::readData);          //有接收數據時,執行讀函數
    QObject::connect(tcpSocket,&QTcpSocket::disconnected,this,&Client::discon);
    ui->sendButton->setEnabled(false);
}

槽函數

void Client::discon()
{
    ui->sendButton->setEnabled(false);
    ui->connectButton->setText(tr("取消連接"));

}

//點擊連接按鈕,開始創建連接
void Client::on_connectButton_clicked()
{
    if(ui->connectButton->text()==tr("連接"))
    {
        tcpSocket->abort();
        tcpSocket->connectToHost(ui->hostLineEdit->text(),ui->portLineEdit->text().toInt());//連接到指定主機的端口
        if(!tcpSocket->waitForConnected(30000))                                             //超時連接失敗
        {
            qDebug()<<"Connection failed!";
            return;
        }
        qDebug()<<"Connection successfully!";
        ui->connectButton->setText("取消連接");
        ui->sendButton->setEnabled(true);
    }
    else
    {
        tcpSocket->disconnectFromHost();
        ui->connectButton->setText("連接");
        ui->sendButton->setEnabled(false);
    }
}

//點擊發送數據
void Client::on_sendButton_clicked()
{
    QString sendData=ui->sendText->toPlainText();                                           //發送數據為文本框的的內容
    tcpSocket->write(sendData.toLocal8Bit());
    tcpSocket->flush();
    ui->sendText->clear();
}

關于“基于Qt的TCP怎么實現通信”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“基于Qt的TCP怎么實現通信”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜阳县| 大埔县| 孝义市| 九龙坡区| 合作市| 边坝县| 白银市| 富民县| 上栗县| 宜昌市| 台中县| 荆门市| 高邑县| 平度市| 观塘区| 常山县| 鹤庆县| 连江县| 河源市| 邻水| 静宁县| 容城县| 阜南县| 保靖县| 新安县| 湖口县| 南平市| 泰州市| 巴林右旗| 龙口市| 崇礼县| 武山县| 贞丰县| 蒲江县| 闵行区| 微博| 郯城县| 文成县| 敦煌市| 昭平县| 沙湾县|