Qt,设计小型多客户端,多线程,互斥,可收发tcp服务端

该博客介绍了一个使用Qt开发的TCP服务器,具备多线程处理多个客户端连接的能力,实现了互斥机制、高并发处理及接收到的数据按文件夹分类存储。关键代码包括服务端逻辑、子客户端逻辑和主程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tcp服务端,实现了多线程,多客户端,互斥,链表,高并发,接收数据,按文件夹分类写入到文件中,是一个用于调试接收打印log,debug等数据的小型tcp服务器。

总体界面

 界面Widget,关键逻辑代码

TcpSerWidget::TcpSerWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::TcpSerWidget)
{
    //设置相关ui界面
    ui->setupUi(this);
    //初始化界面关联和触发
    Init();
    m_TcpSerFlg=0;
    m_pTcpserver = new MyTcpServer;
    //关联客户端收到的数据,刷新到界面
    connect(m_pTcpserver,&MyTcpServer::SendToWidget,this,&TcpSerWidget::ClientInfoSlots);
}
void TcpSerWidget::Init(){
    //IplineEdit,监听端口
    //只输入整数
    //QRegExp regx("[a-zA-Z0-9]+$");
    QRegExp regx("[0-9]+$");
    QValidator *validator = new QRegExpValidator(regx, ui->IplineEdit );
    ui->IplineEdit->setValidator(validator);
    //默认显示
    ui->IplineEdit->setPlaceholderText("端口");

    //plainTextEdit,发送数据窗口
    //文本改变触发函数
    connect(ui->plainTextEdit,SIGNAL(textChanged()),this,SLOT(plainTextEdit_send_textChanged()));
    ui->plainTextEdit->setPlaceholderText("输入需要发送的数据(最大256字节)");

    //pushButton,监听端口
    //触发函数
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(SerListen_pushButton_clicked()));

    //pushButton_2,发送数据按钮
    //触发函数
    connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(pushButton_send_clicked()));

    //ui->textEdit->setFontPointSize(13);
}
//获取本地地址和设置的端口,启动服务器监听
void TcpSerWidget::SerListen_pushButton_clicked(){
    //ui->MesglineEdit->setText(QString(socket->readAll()));
    QString port_qstr=ui->IplineEdit->text();
    quint16 port=port_qstr.toUShort();
    if(port<30000||port>50000){
        port=PORT;
    }
    qDebug("SerListen_pushButton_clicked,port:%s,%d\n",port_qstr.toStdString().c_str(),port);
    if(m_TcpSerFlg!=1){
        //启动日志监听服务

        //监听任何IPv4地址
        m_pTcpserver->listen(QHostAddress::AnyIPv4,port);
        //m_pTcpserver-&g
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值