2023/10/4 -- ARM

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

 ser:

#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:

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

效果图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/124303.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubantu 20.04 卸载与安装 MySQL 5.7 详细教程

文章目录 卸载 MySQL安装 MySQL 5.71.获取安装包2.解压并安装依赖包3.安装 MySQL4.启动 MySQL 扩展开启 gtid 与 binlog 卸载 MySQL 执行以下命令即可一键卸载&#xff0c;包括配置文件目录等。 # 安装sudo软件 apt-get install sudo -y # 卸载所有以"mysql-"开头的…

微信小程序WebSocket实现stream流式聊天对话功能

要在微信小程序实现聊天对话功能&#xff0c;回话是流式应答&#xff0c;这里使用了WebSocket技术。WebSocket大家应该都很熟悉&#xff0c;使用wx.connectSocket就可以了。这里可能需要注意下的是流式应答&#xff0c;后端如何发送&#xff0c;前端如何接收。直接上代码&#…

uboot启动流程-涉及s_init汇编函数

一. uboot启动涉及函数 本文简单分析uboot启动流程中&#xff0c;涉及的汇编函数&#xff1a; lowlevel_init函数调用的函数&#xff1a;s_init 函数 save_boot_params_ret函数调用的函数&#xff1a; _main 函数 本文继上一篇文章的学习&#xff0c;地址如下&#xff1a;…

如何实现torch.arange的tensor版本

文章目录 背景实现方案不可行的情况 背景 import torch我们都知道&#xff0c;torch.arange只支持数字&#xff0c;不支持tensor&#xff0c;如下&#xff1a; torch.arange(0,5,1)tensor([0, 1, 2, 3, 4]) 但是如果使用tensor&#xff0c;就会报错&#xff1a; torch.arang…

正点原子嵌入式linux驱动开发——U-boot顶层Makefile详解

在学习uboot源码之前&#xff0c;要先看一下顶层Makefile&#xff0c;分析gcc版本代码的时候一定是先从顶层Makefile开始的&#xff0c;然后再是子Makefile&#xff0c;这样通过层层分析Makefile即可了解整个工程的组织结构。顶层Makefile也就是uboot根目录下的Makefile文件&am…

word已排序好的参考文献,插入新的参考文献,序号更新

原排序好的文献序号。 现在在3号后面插入一个新文献。4&#xff0c;5号应该成为5&#xff0c;6 这时在3号后面&#xff0c;回车&#xff0c;就会自动的增长。如下图&#xff1a; 但是如果手滑&#xff0c;把[4]删除了如何排序&#xff1f;&#xff1f; 如下图&#xff1a; …

数据分析与挖掘: 红楼梦人物关系(Python)词云图

一: 角色剧本 第一代&#xff1a;水字辈祖宗创下基业 贾源、贾演兄弟二人帮先帝打江山立下战功&#xff0c;贾演被封为宁国公&#xff08;大约有平定江山安宁天下之意&#xff09;&#xff0c;贾源被封荣国公&#xff08;大约有强国富民之功&#xff09;。贾源贾演二兄弟皆是一…

23.2 Bootstrap 卡片

1.卡片 1.1卡片样式 在Bootstrap 5中, .card, card-header, .card-body, .card-footer类是用于创建卡片样式.下面是这些类的简单介绍: * 1. .card: 用于创建一个基本的卡片容器它作为一个包裹元素,通常与其他卡片类一起使用.* 2. .card-header: 用于创建卡片的头部部分.通常在…

Scala第十六章节

Scala第十六章节 scala总目录 文档资料下载 章节目标 掌握泛型方法, 类, 特质的用法了解泛型上下界相关内容了解协变, 逆变, 非变的用法掌握列表去重排序案例 1. 泛型 泛型的意思是泛指某种具体的数据类型, 在Scala中, 泛型用[数据类型]表示. 在实际开发中, 泛型一般是结合…

编程新手?跟着这个教程,用Python画出小猪佩奇

小猪佩奇是许多小朋友们的心头好&#xff0c;它的形象可爱、颜色鲜艳。你知道吗&#xff0c;只需要Python中的一个简单模块&#xff0c;我们就可以自己绘制出这个可爱的形象&#xff01;本文将教你如何使用Python的turtle模块&#xff0c;一步步画出小猪佩奇。 1. 准备工作&a…

mybatis项目启动报错:reader entry: ���� = v

问题再现 解决方案一 由于指定的VFS没有找&#xff0c;mybatis启用了默认的DefaultVFS&#xff0c;然后由于DefaultVFS的内部逻辑&#xff0c;从而导致了reader entry乱码。 去掉mybatis配置文件中关于别名的配置&#xff0c;然后在mapper.xml文件中使用完整的类名。 待删除的…

创建线程池

如何创建线程池及处理相应任务 目录 如何创建线程池及处理相应任务线程池定义解决的问题(需求)工作原理实现线程池创建示意图重要构造器创建线程池(ExecutorService)线程池任务处理常用API处理Runnable任务处理Callable任务 使用工具类(Executors)创建线程池常用API应用案例 拓…