2023/10/4 -- ARM

今日任务:QT实现TCP服务器客户端搭建的代码,现象

ser:

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    server = new QTcpServer(this);
    connect(server,&QTcpServer::newConnection,this,&Widget::newConnectionSlot);

}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_startButton_clicked()
{
    quint16 port = ui->portEdit->text().toUInt();
    //监听客户端的连接请求
    if(!server->listen(QHostAddress::Any,port)){
        QMessageBox::information(this,"失败","监听失败");
        return;
    }else{
        QMessageBox::information(this,"成功","服务器启动成功");
    }
}

void Widget::newConnectionSlot()
{
    //qDebug()<<"您有新的客户端发来请求";

    QTcpSocket *s = server->nextPendingConnection();
    clientList.push_back(s);
    connect(s,&QTcpSocket::readyRead,this,&Widget::readyReadSlot);
}

void Widget::readyReadSlot()
{
    for(int i = 0;i < clientList.size();i++){
        //判断当前套接字是否有效连接
        if(!clientList[i]->state()){
            //将该套接字移除客户端容易
            clientList.removeAt(i);
        }
    }
    for(int i = 0;i < clientList.size();i++){
        if(clientList[i]->bytesAvailable()){
            //将该套接字的数据读取出来
            QByteArray msg = clientList[i]->readAll();
            ui->msgWidget->addItem(QString::fromLocal8Bit(msg));

            for(int j = 0;j < clientList.size();j++){
                clientList[j]->write(msg);
            }
        }
    }
}

cli:

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    server = new QTcpServer(this);
    connect(server,&QTcpServer::newConnection,this,&Widget::newConnectionSlot);

}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_startButton_clicked()
{
    quint16 port = ui->portEdit->text().toUInt();
    //监听客户端的连接请求
    if(!server->listen(QHostAddress::Any,port)){
        QMessageBox::information(this,"失败","监听失败");
        return;
    }else{
        QMessageBox::information(this,"成功","服务器启动成功");
    }
}

void Widget::newConnectionSlot()
{
    //qDebug()<<"您有新的客户端发来请求";

    QTcpSocket *s = server->nextPendingConnection();
    clientList.push_back(s);
    connect(s,&QTcpSocket::readyRead,this,&Widget::readyReadSlot);
}

void Widget::readyReadSlot()
{
    for(int i = 0;i < clientList.size();i++){
        //判断当前套接字是否有效连接
        if(!clientList[i]->state()){
            //将该套接字移除客户端容易
            clientList.removeAt(i);
        }
    }
    for(int i = 0;i < clientList.size();i++){
        if(clientList[i]->bytesAvailable()){
            //将该套接字的数据读取出来
            QByteArray msg = clientList[i]->readAll();
            ui->msgWidget->addItem(QString::fromLocal8Bit(msg));

            for(int j = 0;j < clientList.size();j++){
                clientList[j]->write(msg);
            }
        }
    }
}

效果图:

相关推荐
ArrebolJiuZhou14 小时前
00 arm开发环境的搭建
linux·arm开发·单片机·嵌入式硬件
迪三达17 小时前
智能体开发-2-MCP
arm开发
黑猫学长呀1 天前
【嵌入式系统科普】第2篇:什么是uboot/kernel/根文件系统/BootLoader/操作系统/bios/设备树
linux·arm开发·单片机·嵌入式硬件·arm
风之子npu1 天前
AXI 原子访问
arm开发·笔记·学习
番茄灭世神2 天前
使用VScode开发ARM核芯片通用配置
arm开发·vscode·mcu·cmake·clangd·llvm·ninja
ArrebolJiuZhou2 天前
arm指令集(一)
linux·运维·arm开发
切糕师学AI2 天前
ARM 汇编指令:UBFX
汇编·arm开发
ShiMetaPi2 天前
GM-3568JHF丨ARM+FPGA异构开发板系列教程:外设教程 07 音频
arm开发·fpga开发·音视频·fpga·rk3568
切糕师学AI2 天前
ARM 汇编指令:STP\LDP
汇编·arm开发
管理大亨3 天前
Linux vs Windows:五大维度深度对决
linux·arm开发·windows