6.19 作业

QT实现TCP服务器

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QTcpServer>//服务器类
#include<QMessageBox>//消息对话框类
#include<QTcpSocket>//客户端的类
#include<QList>//链表容器类

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_startBtn_clicked();
public:
    void newConnection_slot();//newConnection信号对应的槽函数声明
public:
    void readyRead_slot();

private:
    Ui::Widget *ui;

    //实例化一个服务器指针
    QTcpServer *sever;
    //定义一个存放客户端套接字的容器
    QList<QTcpSocket *> socketList;
};
#endif // WIDGET_H

源文件

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    ,sever(new QTcpServer(this))//给服务器指针实例空间
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

//启动服务器按钮对应的槽函数
void Widget::on_startBtn_clicked()
{
    //获取ui界面上的端口号
    quint16 port = ui->portEdit->text().toUInt();//将字符串转换成整型
    //让服务器设置监听
    //函数原型:bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
    //参数1:监听的主机
    //参数2:监听的端口号
    //返回值:监听成功返回ture 否则false
    if(sever->listen(QHostAddress::Any,port))
    {
        QMessageBox::information(this,"","启动服务器成功!");
    }
    else
    {
        QMessageBox::information(this,"","启动服务器失败!");
        return;
    }
    //此时服务器已经设置好监听,如果有客户端发来链接,那么服务器就会自动发送一个newConnection()信号
    //将该信号链接到自定义的槽函数中,处理逻辑代码
    connect(sever,&QTcpServer::newConnection,this,&Widget::newConnection_slot);
}
//newConnection信号对应的槽函数实现
void Widget::newConnection_slot()
{
    //使用nextPaddingConnection()获取最新链接客户端的套接字
    //函数原型:virtual QTcpSocket *nextPendingConnection();
    QTcpSocket *s = sever->nextPendingConnection();
    //将客户端放入容器中
    socketList.push_back(s);
    //程序运行至此,此时说明服务器和客户端已经建立了链接
    //如果有客户端向服务器发来数据,客户端就会自动发送一个readyRead信号,就可以将信号连接到自定义的槽函数中,读取数据
    connect(s,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
}

//readyRead信号对应的槽函数实现
void Widget::readyRead_slot()
{
    //遍历客户端容器,移除无效客户端
    for(int i=0;i<socketList.count();i++)
                   //容器的元素个数
    {
        //函数功能:判断链接状态
        //函数原型:SocketState state() const;
        //函数返回值 枚举值为0的表示未连接的
        if(socketList.at(i)->state() == 0)
        {
            //删除该元素
            socketList.removeAt(i);
        }
    }
    //遍历客户端容器,寻找哪个客户端有数据待读
    for(int i=0;i<socketList.count();i++)
    {
        //函数功能:数据的字节
        //函数原型:qint64 byte
        if(socketList.at(i)->bytesAvailable() != 0)
        {
            //读取数据
            QByteArray msg = socketList.at(i)->readAll();

            //将读取到的数据 放入ui界面中
            ui->listWidget->addItem(QString::fromLocal8Bit(msg));

            //将数据广播给所有客户端
            for(int j=0;j<socketList.count();j++)
            {
                socketList.at(j)->write(msg);
            }
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP安装配置

文章目录 1.下载PHP2.配置环境变量3.Apache安装配置 1.下载PHP PHP即“超文本预处理器”&#xff0c;是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言&#xff0c;与C语言类似&#xff0c;是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法…

PFA镊子有无固定支柱尖头扁头规格厂家可定制

PFA镊子&#xff0c;特氟龙镊子&#xff0c;聚四氟乙烯镊子&#xff0c;耐腐蚀耐高温 PFA镊子用于夹取小型片状、薄状、块状样品&#xff0c;广泛应用在半导体、新材料、新能源、原子能、石油化工、无线电、电力机械等行业。 具有耐高低温性&#xff08;可使用温度-200℃&#…

Hedra:让您的照片说话

在数字内容创作的世界里&#xff0c;我们总是在寻找那些能够让我们的作品更加生动和吸引人的工具。Hedra软件就是这样一款工具&#xff0c;它能够让您的照片动起来&#xff0c;甚至说话。想象一下&#xff0c;您的家庭相册中的照片突然变得栩栩如生&#xff0c;或者您的产品图片…

Git/TortoiseGit ssh client 配置

1. Git ssh client 配置 Git 默认的 ssh client 是 <Git 安装目录>/usr/bin/ssh.exe 修改方法为打开 Git Bash 执行&#xff1a; git config --global core.sshCommand "/C/Program Files/TortoiseGit/bin/TortoiseGitPlink.exe" 注意&#xff1a;如果路径…

Word 文本框技巧2则

1 调整大小 一种方法是&#xff0c;选中文本框&#xff0c;周围出现锚点&#xff0c;然后用鼠标拖动来调整大小&#xff1b; 精确按数值调整&#xff0c;在 格式 菜单下有多个分栏&#xff0c;一般最后一个分栏是 大小 &#xff1b;在此输入高度和宽度的数值&#xff0c;来调整…

深度学习算法informer(时序预测)(二)(Encoder)

一、EncoderLayer架构如图&#xff08;不改变输入形状&#xff09; 二、ConvLayer架构如图&#xff08;输入形状中特征维度减半&#xff09; 三、Encoder整体 包括三部分 1. 多层EncoderLayer 2. 多层ConvLayer 3. 层归一化 代码如下 class AttentionLayer(nn.Module):de…

Representation RL:HarmonyDream: Task Harmonization Inside World Models

ICML2024 paper code Intro 基于状态表征的model-based强化学习方法一般需要学习状态转移模型以及奖励模型。现有方法都是将二者联合训练但普遍缺乏对如何平衡二者之间的比重进行研究。本文提出的HarmonyDream便是通过自动调整损失系数来维持任务间的和谐&#xff0c;即在世界…

【51单片机基础教程】点亮led

文章目录 前言51单片机点亮LED的原理硬件部分软件部分51单片机的寄存器编程步骤proteus仿真点亮一个led 点亮多个ledproteus仿真代码 流水灯 总结 前言 单片机&#xff08;Microcontroller Unit, MCU&#xff09;是一种集成电路&#xff0c;广泛应用于各种电子产品中。作为嵌入…

Palo Alto GlobalProtect App 6.3 (macOS, Linux, Windows, Andriod) - 端点网络安全客户端

Palo Alto GlobalProtect App 6.3 (macOS, Linux, Windows, Andriod) - 端点网络安全客户端 Palo Alto Networks 远程访问 VPN 客户端软件 请访问原文链接&#xff1a;https://sysin.org/blog/globalprotect-6/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。…

HotSpot 垃圾收集器

文章目录 前言HotSpot 垃圾收集器1. 查看jdk默认垃圾收集器命令2. 查看当前服务使用的是哪个垃圾收集器:3. 常用的垃圾收集器3.1. 并行垃圾收集器&#xff08;Parallel Garbage Collector&#xff09;3.2. CMS 垃圾收集器&#xff08;Concurrent Mark-Sweep Garbage Collector&…

ubuntu16.04升级cmake版本至3.21.0

ubuntu16.04升级cmake版本至3.21.1 前言&#xff1a;建议先看完文章&#xff0c;再逐步跟做。 相对来说。ubuntu16.04是比较稳定一版&#xff0c;但其默认安装的cmake版本是3.5.1&#xff0c;假如我们需要用到更高的cmake版本&#xff0c;则需要手动升级cmake版本号。以cmake3.…

智能体「自我进化」全流程--AgentGym

AI通用智能体的自我进化能力&#xff0c;并非遥不可及。基于大语言模型的智能体已经不再需要人类监督者的帮助&#xff0c;开始实现「自我进化」&#xff01;这个智能体在学习了专家轨迹以后&#xff0c;获得了基础的通用能力&#xff0c;能够在更广泛、更真实的未知环境与任务…

最新Sublime Text软件安装包分享(汉化版本)

Sublime Text 是一款广受欢迎的跨平台文本编辑器&#xff0c;专为代码、标记和散文编辑而设计。它以其简洁的用户界面、强大的功能和高性能而著称&#xff0c;深受开发者和写作者的喜爱。 一、下载地址 链接&#xff1a;https://pan.baidu.com/s/1kErSkvc7WnML7fljQZlcOg?pwdk…

STM32单片机-PWR电源控制和WDG看门狗

STM32单片机-PWR电源控制和WDG看门狗 一、PWR简介二、低功耗模式三、修改主频&睡眠模式&停机模式&待机模式3.1 修改主频3.2 睡眠模式3.3 停机模式3.4 待机模式 四、WDG简介4.1 独立看门狗原理4.2 窗口看门狗原理4.3 IWDG和WWDG对比 五、独立看门狗&窗口看门狗5…

超导托卡马克主要用于可控核聚变领域 我国企业具备高性能产品自主研发实力

超导托卡马克主要用于可控核聚变领域 我国企业具备高性能产品自主研发实力 超导托卡马克又称半超导托卡马克&#xff0c;指电磁线圈由超导材料制成的核聚变装置。与传统托卡马克相比&#xff0c;超导托卡马克具有运行稳定性好、磁场强度高、能承受极强电流、能耗低等优势&#…

理智申请香港优才计划!香港优才的6个真相,很多人被坑了!

理智申请香港优才计划&#xff01;香港优才的6个真相&#xff0c;很多人被坑了&#xff01; 香港优才计划因为取消名额限制变得异常火爆&#xff0c;申请人数大幅上涨&#xff01; 其中也有不少人没有做过思考就直接申请的&#xff0c;最终结果就是被坑。 为什么说被坑&…

PAT A1016. 最短路径

题意 有N个结点围成一个圈&#xff0c;相邻两个点之间的距离已知&#xff0c;且每次只能移动到相邻点。然后给出M个询问&#xff0c;每个询问给出两个数字A和B即结点编号(1≤A,B≤N)&#xff0c;求从A号结点到B号结点的最短距离。样例解释 如图3-2所示,共有5个结点&#xff0c;…

计算机网络:网络层 - IP数据报的转发

计算机网络&#xff1a;网络层 - IP数据报的转发 基于终点转发最长前缀匹配二叉线索树路由表特殊路由特定主机路由默认路由 IP多播 基于终点转发 路由器转发报文时&#xff0c;是通过报文中的目的地址字段来转发的&#xff0c;也即是说路由器只知道终点的IP地址&#xff0c;根…

哈喽GPT-4o——对GPT-4o 编程的思考与看法

GPT-4o&#xff08;“o”代表“全能”&#xff09;它可以接受任意组合的文本、音频和图像作为输入&#xff0c;并生成任意组合的文本、音频和图像输出。 &#x1f449; GPT功能&#xff1a; GPT-4o知识问答&#xff1a;支持1000token上下文记忆功能最强代码大模型Code Copilo…

用电子表单替代纸质表格,签到报名、出入登记更轻松

用纸质表格收集信息时&#xff0c;常常会出现数据丢失、不易统计等问题。我们可以搭建电子表单来代替线下纸质表格&#xff0c;进行信息收集、记录数据。 这些数据会保存在账号下&#xff0c;可以导出Excel或PDF进行存档&#xff1b;也可以根据企业要求自定义PDF导出格式。 并…