10-project-tcpServer

#include "widget.h"
#include "ui_widget.h"

// 构造函数
Widget::Widget(QWidget *parent) :
    QWidget(parent), // 基类构造函数调用
    ui(new Ui::Widget), // 动态分配界面对象
    tcpServer(new QTcpServer(this)) // 创建TCP服务器实例
{
    // 设置UI界面
    ui->setupUi(this);
    setWindowTitle("服务器"); // 设置窗口标题

    // 尝试启动TCP服务器监听端口
    if (!tcpServer->listen(QHostAddress("127.0.0.1"), 8888)) 
    {
        // 如果监听失败,则输出错误信息
        qDebug() << "服务器启动失败";
        return; // 退出构造函数
    } 
    else
    {
        // 如果监听成功,则输出成功信息
        qDebug() << "服务器启动成功,监听端口: 8888";
    }

    // 当有新连接时,触发handleNewConnection槽函数
    connect(tcpServer, &QTcpServer::newConnection, this, &Widget::handleNewConnection);

    // 当用户点击发送按钮时,触发sendData槽函数
    connect(ui->SendPushButton, &QPushButton::clicked, this, &Widget::sendData);
}

// 析构函数
Widget::~Widget()
{
    // 清理资源
    delete ui; // 释放UI对象内存
    tcpServer->close(); // 关闭服务器
    delete tcpServer; // 释放服务器对象内存
}

// 处理新连接
void Widget::handleNewConnection()
{
    // 只要还有未处理的连接请求就一直处理
    while (tcpServer->hasPendingConnections())
    {
        // 获取下一个待处理的连接
        tcpSocket = tcpServer->nextPendingConnection();

        // 当有数据可读时,更新接收文本区域
        connect(tcpSocket, &QTcpSocket::readyRead, this, [=]() {
            ui->RecvTextEdit->setText(tcpSocket->readAll()); // 显示接收到的数据
        });

        // 当连接断开时,自动删除QTcpSocket对象
        connect(tcpSocket, &QTcpSocket::disconnected, tcpSocket, &QTcpSocket::deleteLater);
    }
}

// 发送数据给客户端
void Widget::sendData()
{
    // 检查是否处于连接状态
    if (tcpSocket && tcpSocket->state() == QAbstractSocket::ConnectedState) 
    {
        // 获取要发送的数据
        QByteArray data = ui->SendTextEdit->toPlainText().toUtf8();

        // 发送数据
        tcpSocket->write(data);
        tcpSocket->flush(); // 强制发送缓冲区中的数据
    }
    else
    {
        qDebug()<<"客户端未连接";
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值