当前位置: 首页 > news >正文

QTday5 2024-06-19

作业要求:

1.思维导图

2.整理代码:TCP服务器

 作业1:思维导图

作业2:整理代码

运行代码:

widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpServer>
#include <QList>
#include <QMessageBox>
#include <QTcpSocket>
#include <QByteArray>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_startBtn_clicked();void newConnection_slot();void readyRead_slot();private:Ui::Widget *ui;//套接字文件QTcpServer *server;QList<QTcpSocket *> socketlist;};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),server(new QTcpServer(this))
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_startBtn_clicked()
{//1.创建好套接字后,首先绑定portquint16 port = ui->portEdit->text().toUInt();//2.开启监听if(server->listen(QHostAddress::Any,port)){//开启监听成功QMessageBox::information(this,"提示","开启监听成功",QMessageBox::Ok);}else{//开启监听失败QMessageBox::information(this,"提示","开启监听失败",QMessageBox::Ok);return;}//运行至此,开始连接newConnection()函数和槽connect(server,&QTcpServer::newConnection,this,&Widget::newConnection_slot);}void Widget::newConnection_slot()
{//进入该函数,说明接受到客户端的连接//1.创建用于通信的套接字文件QTcpSocket *s = server->nextPendingConnection();//2.放入套接字容器socketlist.push_back(s);//发送信号readyread,将套接字与对应槽函数连接,从而可以实现通信。connect(s,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
}void Widget::readyRead_slot()
{//首先去除无效套接字文件。for(int i=0;i<socketlist.count();i++){if(socketlist.at(i)->state()==0){//说明无效,从列表中去除socketlist.removeAt(i);}}//接受信息for(int i=0;i<socketlist.count();i++){if(socketlist.at(i)->bytesAvailable()!=0){//说明接受到了信息QByteArray msg = socketlist.at(i)->readAll();ui->msgList->addItem(QString::fromLocal8Bit(msg));for(int j=0;j<socketlist.count();j++){socketlist.at(j)->write(msg);}}}
}

运行截图:

相关文章:

  • 视频监控管理平台智能边缘分析一体机安防监控平台离岗检测算法
  • MYSQL数据库安装
  • 【文档智能 RAG】RAG增强之路-智能文档解析关键技术难点及PDF解析工具PDFlux
  • 【网络安全学习】漏洞扫描:-01- 漏洞数据库searchsploit的使用
  • 北京银行品牌价值提升160亿元首破千亿 位居《中国500最具价值品牌》榜第85位!
  • qt 5.6 qmake手册
  • php实现modbus CRC校验
  • HJ39判断两个IP是否属于同一子网(中)
  • java 线程之间通信-volatile 和 synchronized
  • MySQL版本发布模型
  • unity2d Ugui--Image城市道路汽车行驶
  • 多层级iframe下JS调用点击事件
  • Sui的Fastcrypto加密库刷新速度记录
  • 【单片机】三极管的电路符号及图片识别
  • 机动车检测站授权签字人精选试题(附答案)
  • Android组件 - 收藏集 - 掘金
  • isset在php5.6-和php7.0+的一些差异
  • Java方法详解
  • java中具有继承关系的类及其对象初始化顺序
  • Odoo domain写法及运用
  • Phpstorm怎样批量删除空行?
  • Python实现BT种子转化为磁力链接【实战】
  • sessionStorage和localStorage
  • spring boot下thymeleaf全局静态变量配置
  • spring cloud gateway 源码解析(4)跨域问题处理
  • vuex 笔记整理
  • 从零开始学习部署
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 前嗅ForeSpider采集配置界面介绍
  • 听说你叫Java(二)–Servlet请求
  • 微信小程序开发问题汇总
  • 运行时添加log4j2的appender
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #数据结构 笔记三
  • (2)空速传感器
  • (3)选择元素——(17)练习(Exercises)
  • (4)Elastix图像配准:3D图像
  • (Java数据结构)ArrayList
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (差分)胡桃爱原石
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (面试必看!)锁策略
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)VC++中ondraw在什么时候调用的
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET6实现破解Modbus poll点表配置文件
  • .net开发日常笔记(持续更新)