首页 > 编程语言 >Qt&&C++ 实现Tcp Server

Qt&&C++ 实现Tcp Server

时间:2023-12-24 22:15:43浏览次数:50  
标签:... socket C++ server 客户端 QTcpSocket nextPendingConnection Server Qt

关于Qt&C++实现Tcp服务器的一些简易使用笔记...


 "材料"准备

#include <QTcpServer>  //Server需要包含该头文件,Client则不用
#include <QTcpSocket>
#include <QHostAddress>


服务器流程简要

1. 实例化一个QTcpServer对象:   QTcpServer* server = new QTcpServer(this);

2. 开始监听server的ip和端口: server->listen(QHostAddress("127.0.0.1"),12345);

3. 处理信息等...(如下使用说明)

4. 关闭server: server->close();


服务器流程使用说明

在开始监听Server后,如果有客户端连接上,server会发送QTcpServer::newConnection信号,

我们可以在槽函数里面调用server->hasPendingConnections()判断是否还有新连接的客户端,

不断循环去用server->nextPendingConnection()接受新客户端.

使用如下:

while(server->hasPendingConnections())
{
        //nextPendingConnection返回下一个挂起的连接作为已连接的QTcpSocket对象
        //返回的QTcpSocket对象不能在另一个线程使用,可重写incomingConnection()满足需要.
        QTcpSocket *socket=server->nextPendingConnection();
        //...在下面写对于连接上的客户端操作
}

对于读取客户端发来的数据,我们可以用另一个槽函数处理,因为每当客户端发来消息时,socket对象会发送QTcpSocket::readyRead的信号

我们可以判断client发送的消息并对对方发送数据( 发送数据需要用客户端的套接字的write方法, socket->write(QByteArray类型数据); )

对上面的代码稍作修改,就是这样:

 

while(server->hasPendingConnections())
{
        //nextPendingConnection返回下一个挂起的连接作为已连接的QTcpSocket对象
        //返回的QTcpSocket对象不能在另一个线程使用,可重写incomingConnection()满足需要.
        QTcpSocket *socket=server->nextPendingConnection();
        //...在下面写对于连接上的客户端操作
    
        connect(socket,&QTcpSocket::readyRead,[this,socket]{
            //当socket发来消息,在这里处理即可
            if(socket->bytesAvailable()<=0)//如果没消息可以获取就返回
                return;
            QByteArray readbytes = socket->readAll();//此时socket->readAll();即可获取套接字传来的信息
            //...剩余其他操作在后面处理即可
            socket->write(QString("read success").toUtf8());//利用socket这样就可以发送数据
        });
}

 

标签:...,socket,C++,server,客户端,QTcpSocket,nextPendingConnection,Server,Qt
From: https://www.cnblogs.com/bcaid/p/qt_cxx_tcp_server.html

相关文章

  • 设计模式<c++> (3)观察者模式
     /***ObserverDesignPattern**Intent:Letsyoudefineasubscriptionmechanismtonotifymultipleobjects*aboutanyeventsthathappentotheobjectthey'reobserving.**Notethatthere'salotofdifferenttermswithsimilarme......
  • 人工智能算法原理与代码实战:从Python到C++
    1.背景介绍人工智能(ArtificialIntelligence,AI)是一门研究如何让计算机模拟人类智能的学科。它涉及到多个领域,包括机器学习、深度学习、计算机视觉、自然语言处理、机器人等。随着数据量的增加和计算能力的提升,人工智能技术的发展得到了极大的推动。在过去的几年里,人工智能的研究......
  • mqtt 共享订阅简单说明
    mqtt是一个比较常用的iot协议,5.0支持共享订阅,共享订阅是一个特别方便的功能,可以实现业务的高可用,以及提升消息的处理参考格式共享订阅格式$share/{ShareName}/{TopicFilter}ShareName是一个共享名称,可以实现业务组的能力,TopicFilter}可以对于订......
  • C++ Qt开发:Charts折线图绑定事件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QCharts折线图的常用方法及灵活运用。在上一篇文章中笔者介绍了关于QCharts绘图组件的详细使用方......
  • 设计模式<c++> (2)单例模式
    #include<iostream>#include<thread>#include<mutex>classSingleton{private:staticSingleton*pinstance_;staticstd::mutexmutex_;protected:Singleton(conststd::stringvalue):value_(value){}~Single......
  • Linux 启动MySQL 报错:Status:“Server shutdown complete“ Error:13(权限不够)
    Status:“Servershutdowncomplete”Error:13(权限不够)我在银河麒麟V10系统中安装启动MySQL出现的一个错误:“Servershutdowncomplete”Error:13(权限不够),我在其他系统中没有遇到到。问题背景在国产化系统银河麒麟V10上尝试启动MySQL服务器时,可能会收到如下错误信息:Status:"Ser......
  • C++ Qt开发:ProgressBar进度条组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ProgressBar进度条组件的常用方法及灵活运用。ProgressBar(进度条)是在Qt中常用的用户界面组件之一,用......
  • C++ Qt开发:DateTime日期时间组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QDateTime日期与时间组件的常用方法及灵活运用。在Qt中,日期和时间的处理通常使用QDateTime类。QD......
  • C++ Qt开发:Slider滑块条组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Slider滑块条组件的常用方法及灵活运用。当涉及到C++Qt开发中的Slider滑块条组件时,你可能会用到QS......
  • C++ Qt开发:CheckBox多选框组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍CheckBox单行输入框组件的常用方法及灵活运用。QCheckBox是Qt中用于实现复选框的组件,它提供了丰......