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("已与服务器断开连接");
}

本文原创,转载请注明出处。

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