QT初探TCP(四)

发布于:2025-09-11 ⋅ 阅读:(18) ⋅ 点赞:(0)

前言:服务端实现逻辑借助epoll, 网络学习-epoll(四)

一、TCP

之前在网络的学习时,为快速理解linux网络I/O模型,客户端是借助网络调试助手,现在回过头来看看,这个网络调试助手,也是用QT进行开发的
在这里插入图片描述

这边也简单实现一个网络助手:

实现简单的收发功能

在这里插入图片描述

需要注意的是,目前要用到socket,根据QT6官方给的文档,必须要在自己项目的CMakelists.txt中,添加如下语句

在这里插入图片描述

find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(proj_name PRIVATE Qt6::Network)
  1. 连接网络功能
void Widget::on_connect_Button_clicked()
{
    //如果已连接,就断开连接
    if(socket->state() == QAbstractSocket::ConnectedState){
        socket->disconnectFromHost();
        ui->connect_Button->setText("连接网络");
        return;
    }

    //先获取IP地址和端口号
    QString server_ip = ui->server_address_lineEdit->text();
    QString server_port = ui->server_port_lineEdit->text();

    if(server_ip.isEmpty() || server_port.isEmpty()){
        QMessageBox::warning(this, "警告", "服务器地址或端口不能为空");
        return;
    }else{
        socket->connectToHost(QHostAddress(server_ip), server_port.toShort());

        //设置按钮为“正在连接...”
        ui->connect_Button->setText("正在连接...");
        ui->connect_Button->setEnabled(false);
    }
}
  1. 发送数据功能
void Widget::on_send_Button_clicked()
{
    //如果服务器未连接,返回
    if(socket->state() != QAbstractSocket::ConnectedState){
        QMessageBox::warning(this, "警告", "未连接服务器");
        return;
    }

    QString message = ui->send_textEdit->toPlainText();
    if(message.isEmpty()){
        QMessageBox::warning(this, "警告","发送内容不能为空");
        return;
    }

    //开始发送数据
    QByteArray ba = message.toUtf8();
    socket->write(ba);

    // 在接收框显示自己发送的消息
    ui->receive_textBrowser->append("client: " + message);

    // 清空发送框
    ui->send_textEdit->clear();
}
  1. 新增一个清空接收数据的按钮
void Widget::on_clear_receive_Button_clicked()
{
    ui->receive_textBrowser->clear();
}

在这里插入图片描述
***PS:***总体写下来,就简单的收发,比我想象中的代码要清晰很多,毕竟QT官方搞了这么多年,把许多细节全部封装了,提高了开发效率。

Code


网站公告

今日签到

点亮在社区的每一天
去签到