当前位置: 首页 > 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);}}}
}

运行截图:

http://www.lryc.cn/news/383261.html

相关文章:

  • Node官网下载各个版本
  • 备战秋招day4
  • 【华为OD机试B卷】服务器广播、需要广播的服务器数量(C++/Java/Python)
  • 目标检测数据集 - 手机屏幕表面表面缺陷检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • 语音相关算法学习整理
  • [C#] opencvsharp对Mat数据进行序列化或者反序列化以及格式化输出
  • Linux中的TCP与UDP:理解两者的差异
  • 通信系统网络架构_1.局域网网络架构
  • Pycharm 启动 Django项目 —— python篇
  • 6-47选择整数计算
  • 什么是Redis?|介绍与使用及特点浅记
  • LeetCode题练习与总结:只出现一次的数字Ⅱ--137
  • Live Wallpaper Themes 4K Pro for Mac v19.9 超高清4K动态壁纸
  • vue3+ts:监听dom宽高变化函数
  • 数据库浅识及MySQL的二进制安装
  • 机器学习之数学基础(七)~过拟合(over-fitting)和欠拟合(under-fitting)
  • ⭐最新版!SpringBoot正确集成PageHelper姿势,不再被误导!
  • 解决:Xshell通过SSH协议连接Ubuntu服务器报“服务器发送了一个意外的数据包,received:3,expected:20”
  • [学习笔记] 禹神:一小时快速上手Electron笔记,附代码
  • Java stream操作流常用的方式
  • 【C#】图形图像编程
  • 埃特巴什码加解密小程序
  • Golang笔记:使用serial包进行串口通讯
  • EasyExcel 导出批注信息
  • HttpServletRequest・getContentLeng・getContentType区别
  • Matlab|【防骗帖】考虑时空相关性的风电功率预测误差建模与分析
  • 【Android面试八股文】说一说ListView卡顿的原因以及相对应的优化策略
  • Kotlin 中的内联函数
  • KALI LINUX 开启ssh免登录服务及固定ip及
  • 亮数据,一款新的低代码爬虫利器!