QT之TCP/IP通信---客戶端

繼續上一篇的...

寫在前面:客戶端中幾個重要的信號與方法

//連接服務器,port指的是服務器監聽的端口
tcpSocket->connectToHost(QHostAddress(ip), port);

//與服務器連接成功時觸發該信號
&QTcpSocket::connected

//服務器發來消息時觸發該信號
&QTcpSocket::readyRead

//發送消息給服務器就是將數據寫入到該方法中
tcpSocket->write(str.toUtf8().data());

//與服務器斷開連接
tcpSocket->disconnectFromHost();
tcpSocket->close();

在上面的項目文件中添加新文件(帶有界面的)

1.  添加一個新類(Client),引用頭文件(client.h)

//1. 引用頭文件
#include <QTcpSocket>
#include <QHostAddress>

2. 創建對象(client.h)

private:
    Ui::ClientWidget *ui;

    //2. 創建對象
    QTcpSocket *tcpSocket;

3. 給對象分配空間(client.cpp)

    //3. 給對象分配空間
    tcpSocket = new QTcpSocket(this);

4. 與服務器建立連接(client.cpp)

// 4. 當建立連接按鈕被點擊的時候,與服務器建立連接
void ClientWidget::on_buttonConnect_clicked()
{
    //A. 獲取服務器的IP和端口
    QString ip = ui->lineEditIP->text();
    qint16 port = ui->lineEditPort->text().toInt();

    //B. 建立連接
    tcpSocket->connectToHost(QHostAddress(ip), port);
}

5. 檢測與服務器連接的狀態(client.cpp)

    //5. 如果與服務器連接成功,則產生connected信號
    connect(tcpSocket, &QTcpSocket::connected,
            [=]()
            {
                ui->textEditReceive->append("與服務器連接成功");
            }
            );

6. 實現消息發送的功能(client.cpp)

//6. 當點擊發送按鈕的時候,將消息發送到服務器
void ClientWidget::on_buttonSend_clicked()
{
    //A. 獲取文本框內容
    QString str = ui->textEditSend->toPlainText();
    //B. 發送消息
    tcpSocket->write(str.toUtf8().data());
}

7. 接收服務器發送來的消息(client.cpp)

    //7. 接收服務器發來的消息(當服務器發來消息時會觸發readyRead()信號)
    connect(tcpSocket, &QTcpSocket::readyRead,
            [=]()
            {
                //A. 讀取tcp的所有消息
                QByteArray array = tcpSocket->readAll();
                //B. 顯示到UI上
                ui->textEditReceive->append(array);
            }
            );

8. 實現斷開連接(client.cpp)

//8. 當點擊斷開的時候,斷開與服務器的連接
void ClientWidget::on_buttonClose_clicked()
{
    tcpSocket->disconnectFromHost();
    tcpSocket->close();
    ui->textEditReceive->append("已與服務器斷開連接");
}

本文原創,轉載請註明出處。

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