qt服务器 网络聊天室

这篇具有很好参考价值的文章主要介绍了qt服务器 网络聊天室。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

widget.cpp

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //给服务器指针实例化空间
    server = new QTcpServer(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:要坚听的主机地址,any表示监听任意主机地址,也可以给定特定主机地址
    //参数2:提供的端口号,如果时0,表示让系统自动分配端口号
    //返回值:bool,成功监听返回true,失败返回false
    if (server->listen(QHostAddress::Any, port))
    {
        QMessageBox::information(this, "", "服务器启动成功");
    }
    else
    {
        QMessageBox::information(this, "", "服务器启动失败");
    }

    //此时服务器已经进入监听状态,如果有客户端发来连接请求,那么该服务器就会自动发射一个newConnection信号
    //可以将该信号连接到自定义的槽函数中处理心连接的套接字
    connect(server, &QTcpServer::newConnection, this, &Widget::newConnection_slot);

}

//处理newConnection信号的槽函数的实现
void Widget::newConnection_slot()
{
    qDebug() << "有新客户端发来连接";

    //获取最新连接的客户端套接字
    //函数原型:virtual QTcpSocket *nextPendingConnection();
    //功能:获取最新连接客户端的套接字
    //参数:无
    //返回值:套接字指针
    QTcpSocket *s = server->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++)
    {
        //        socketList.at(i)->state();  //任意一个客户端的状态
        //函数原型:SocketState state() const;
        //功能:返回套接字状态
        //参数:无
        //返回值:套接字状态,是个枚举值,如果是0,表示无效连接
        if (socketList.at(i)->state() == 0)
        {
            //移除该客户端
            socketList.removeAt(i);     //将下标为i的套接字从链表中移除
        }
    }

    //遍历客户端套接字去寻找哪个客户端有数据待读
    for (int i = 0; socketList.count(); i++)
    {
        //判断当前套接字是否有数据待读
        //函数原型:qint64 bytesAvailable() const override;
        //功能:求出当前套接字待读数据的个数
        //参数:无
        //返回值:待读数据的个数
        if (socketList.at(i)->bytesAvailable() != 0)
        {
            //说明当前套接字中有数据
            //读取当前套接字中的数据
            //函数原型:QByteArray readAll();
            //功能:读取套接字中所有数据
            //参数:无
            //返回值:QByteArray读取下来的数据
            QByteArray msg = socketList.at(i)->readAll();

            //将数据展示到界面
            ui->msgWidget->addItem(QString::fromLocal8Bit(msg));

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

qt服务器 网络聊天室,qt,服务器,网络

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

到了这里,关于qt服务器 网络聊天室的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 基于qt软件的网上聊天室软件

    1.服务器:         1).功能: 用于创建一个客户端,通过文本编辑器来获得端口号,根据获得的端口号创建服务器,等待客户端连接 创建成功会提示服务器创建成功 在收到客户端发送的信息时,把这条信息发送给其他所有客户端,实现群聊功能         2).代码: 2.客户端

    2024年02月09日
    浏览(47)
  • Qt实战:云曦聊天室篇——环境部署

    基于Qt的网络聊天室,可进行群聊,私聊,添加好友,创建群聊,添加群聊等功能

    2024年02月05日
    浏览(32)
  • 网络聊天室

    利用UDP协议,实现一套聊天室软件。服务器端记录客户端的地址,客户端发送消息后,服务器群发给各个客户端软件。 问题思考 客户端会不会知道其它客户端地址? UDP 客户端不会直接互连,所以不会获知其它客户端地址,所有客户端地址存储在服务器端。 有几种消息类型

    2024年02月11日
    浏览(47)
  • QT程序设计多人聊天室(基于QT、sqlite3、TCP/IP)

    目录 技术路线 效果展示 程序主体 sqoperator.h mylogin.h myenroll.h chatinterface.h tips.h myapp.h ******************* sqoperator.cpp mylogin.cpp myenroll.cpp chatinterface.cpp tips.cpp myapp.cpp main.cpp widget.h widget.cpp main.cpp QT程序设计、sqlite数据库调用、TCP/IP客户端与服务端的搭建 通过次程序代码,可以学习如

    2024年02月09日
    浏览(64)
  • 基于UDP实现的网络聊天室

    服务器: 客户端: 运行结果:

    2024年03月08日
    浏览(65)
  • 网络聊天室的UDP实现以及数据库

    网络聊天室UDP实现 服务器端: 头文件: 主函数: 自定义函数: 客户端: 思维导图:

    2024年03月21日
    浏览(47)
  • 【网络编程】UDP简单实现翻译软件与网络聊天室

    在上一章【网络编程】demo版UDP网络服务器实现实现了客户端和服务端之间的数据的发送与接收,上一章我们是直接让服务端把接收到的数据打印出来。 但是服务端并不是只接收到数据就完了,它还要 处理任务 。 所以我们可以在服务端设置一个回调函数: 用来处理接收到的

    2024年02月05日
    浏览(80)
  • 计算机网络 TCP/UDP程序开发网络聊天室

    TCP/UDP程序开发 开发TCP/UDP协议应用程序,掌握网络应用程序的工作原理。通过该实验,深入理解UDP和TCP协议的异同点,了解网络协议的工作过程,学会网络通信编程的基本方法,能够编制网络应用程序。 (1)了解和掌握“基于UDP-面向无连接的应用程序/基于TCP-面向连接的

    2024年02月05日
    浏览(89)
  • Linux 基本语句_16_Udp网络聊天室

    服务端代码: 客户端代码: 总体效果是客户上线状态、退出状态、发送的消息都能通过广播,将信息发送给所有在线客户端,服务端能接收并显示所有客户端发送的消息,且也具备广播能力 服务端: 服务端创建了一个链表,这个链表中的每个节点是专用于储存客户端的ip地

    2024年02月04日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包