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

效果图:

相关推荐
豆芽脚脚15 小时前
华为鲲鹏arm服务器部署DeepSeek-V4-Flash-0731-w8a8
运维·服务器·arm开发
qq_402995752 天前
Secure Boot Part 3 —— 信任根和信任链
arm开发·stm32·信任链
可爱系程序猿2 天前
ARM电脑安装打印机驱动失败:先辨认安装器、系统架构与打印路径
arm开发·程序人生·电脑
蓝天下的守望者2 天前
ARM CoreLink IP Overview
arm开发
cnnews2 天前
Ubuntu 编译 postmarketOS
linux·运维·arm开发·ubuntu·github·音视频
Doraemomo2 天前
硬件基础概念
arm开发
Mr_YDK3 天前
鲲鹏平台开发全链路实战系列 | 博客一:从x86到鲲鹏ARM——DevKit代码迁移工具完全实战
arm开发·信创改造·鲲鹏arm迁移
蓝天下的守望者3 天前
ARM SOC architecture学习文档整理
arm开发·学习
qq_402995753 天前
Secure Boot Part 2 —— 安全启动流程
arm开发·mcu·安全
外域速览4 天前
GPT-6 Astra 开放、标普罕见拉响 AI 基建信用警报、三星 Arm 联手 2nm 端侧芯片:算力下半场的三条主线
arm开发·人工智能·gpt