DAY4,Qt(事件处理机制的使用,Qt中实现服务器的原理)

这篇具有很好参考价值的文章主要介绍了DAY4,Qt(事件处理机制的使用,Qt中实现服务器的原理)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.Qt中实现服务器的原理;

---chatser.h---头文件
#ifndef CHATSER_H
#define CHATSER_H

#include <QWidget>
#include <QTcpServer>  //服务器类
#include <QTcpSocket>  //套接字类
#include <QMessageBox>  //消息对话类
#include <QList>  //链表容器
#include <QDebug>  //信息调试类

QT_BEGIN_NAMESPACE
namespace Ui { class Chatser; }
QT_END_NAMESPACE

class Chatser : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_start_btn_clicked();  //启动服务器按钮槽函数
    void newConnection_slot();  //处理cli连接信号槽
    void readyRead_slot();  //处理cli发送数据信号槽

private:
    Ui::Chatser *ui;

    QTcpServer *server;  //定义服务器指针
    QList<QTcpSocket*> socketList;  //定义客户端容器
};
#endif // CHATSER_H
---chatser.cpp---函数实现文件
#include "chatser.h"
#include "ui_chatser.h"

Chatser::Chatser(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Chatser)
{
    ui->setupUi(this);

    server = new QTcpServer(this);  //给服务器指针实例化空间
}

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

//启动服务器按钮槽函数
void Chatser::on_start_btn_clicked()
{
    //获取ui界面上的端口号
    quint16 port = ui->port_edit->text().toUInt();

    //将服务器设为监听状态
    if(server->listen(QHostAddress::Any,port))
    {
        QMessageBox::information(this,"listen","服务器启动成功");
    }else
    {
        QMessageBox::information(this,"listen","服务器启动失败");
    }

    //如果有客户端发来连接请求,那么该服务器就会自动发射一个newConnection信号
    //将客户端连接信号与对应槽函数连接
    connect(server,&QTcpServer::newConnection,this,&Chatser::newConnection_slot);
}

//处理cli连接信号槽
void Chatser::newConnection_slot()
{
    qDebug()<<"有新客户端连接";
    //获取最新连接的客户端套接字
    QTcpSocket *s = server->nextPendingConnection();

    //将套接字放入客户端容器中
    socketList.push_back(s);

    //如果有客户端向服务器发来数据,那么该客户端会自动发射一个readyRead信号
    //将客户端发送数据信号与对应槽函数连接
    connect(s,&QTcpSocket::readyRead,this,&Chatser::readyRead_slot);
}

//处理cli发送数据信号槽
void Chatser::readyRead_slot()
{
    //移除无效客户端
    for(int i=0; i<socketList.count(); i++)
    {
        if(socketList.at(i)->state() == 0)  //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界面
            ui->msg_Widget->addItem(QString::fromLocal8Bit(msg));

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

}










---main.cpp---测试文件
#include "chatser.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Chatser w;
    w.show();
    return a.exec();
}
结果展示--- 

DAY4,Qt(事件处理机制的使用,Qt中实现服务器的原理),qt,qt,开发语言,c++,服务器

 文章来源地址https://www.toymoban.com/news/detail-613703.html

2.今日思维导图;

DAY4,Qt(事件处理机制的使用,Qt中实现服务器的原理),qt,qt,开发语言,c++,服务器

 

到了这里,关于DAY4,Qt(事件处理机制的使用,Qt中实现服务器的原理)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt : day4

    1.思维导图  2.服务器  3.时钟  

    2024年02月15日
    浏览(39)
  • QT DAY4

    做一个闹钟,并播报填写内容  widget.h 文件  widget.cpp文件 实现效果         在没有点击启动按钮时,时间和信息都可以修改,点击关闭按钮无效。          信息和时间填写完后,点击启动按钮后,启动按钮被锁定,时间框和信息框无法再修改内容,只有关闭按钮可以点

    2024年02月13日
    浏览(36)
  • QT DAY4作业

    1. 头代码 源代码 效果图 2.思维导图

    2024年02月02日
    浏览(53)
  • QT 作业 day4 7/28

    1.思维导图     2.手动完成服务器实现 .h .cpp

    2024年02月15日
    浏览(53)
  • 嵌入式:QT Day4

    源码: widget.h widget.cpp main.cpp

    2024年02月14日
    浏览(41)
  • qt图形化界面开发DAY4

    2024年01月23日
    浏览(34)
  • QT day4 (time/tcp/draw)

     1、头文件 2、main函数 3、功能函数 1、服务器 (头文件)  TCP功能函数 客户端 (头文件) 功能函数 效果图 头文件 功能函数 效果图

    2024年02月09日
    浏览(38)
  • C++linux高并发服务器项目实践 day4

    int access(const char * pathname ,int mode); int chmod(const char * filename,int mode); int chown(const char* path,uid_t owner,gid_t group); int truncate(const char* path,off_t length); #include unistd.h int access(const char *pathname, int mode); 作用:判断某个文件是否有某个权限,或者判断文件是否存在 参数: pathname:判断文件路

    2023年04月16日
    浏览(47)
  • Qt事件机制

    概述 Qt程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发。事件系统在Qt总扮演了十分重要的角色,其事件的生成与事件的派发对GUI 程序起到了核心的作用。Qt事件处理流程图和时序图大致如下, 下面对于整个事件循环系统进行详细的讲解。 1. 事件生成 Qt中事件主

    2024年02月15日
    浏览(47)
  • QT的事件机制

    事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件是****用户操作 做出响应时发出 ,如键盘事件等;另一些事件则是由 系统自动发出 ,如计时器事件。 在前面我们也曾

    2024年01月20日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包