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);
            }
        }
    }
}

效果图:

相关推荐
Good白10191 天前
嵌入式:1.嵌入式入门|初识嵌入式、处理器、ARM与STM32
arm开发·stm32·嵌入式硬件
물の韜2 天前
ZYNQ/FMQL系列Linux之I2C开发实战
linux·arm开发·嵌入式硬件·设备树·iic·zynq
女神下凡3 天前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
女神下凡7 天前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范
NamoAmitabha1287 天前
ARM Cortex-A9 核心架构(演化后的“缝合怪”)--deepseek
arm开发·zynq--ps
AllData公司负责人7 天前
AllData 可定义数据中台完成信创适配|银河麒麟 + 海光X86 CPU / 华为鲲鹏ARM CPU+ OceanBase / 人大金仓国产化环境部署落地
大数据·arm开发·数据库·人工智能·oceanbase·kingbase
a5986528 天前
ARM服务器搭建云手机靠谱吗?个人自建方案优缺点总结
服务器·arm开发·智能手机·云手机
jiecy8 天前
在 ARM 的 UOS 系统里布署 WebDav
arm开发·docker·debian
女神下凡8 天前
芯参谋(87):Linux 系统(SPI NOR)驱动开发指南
linux·运维·arm开发·驱动开发·嵌入式硬件·设计规范