Qt TCP/UDP通讯封装

Qt TCP/UDP通讯封装

TCP客户端

class TcpClient :public QTcpSocket
{
    Q_OBJECT
public:
    explicit TcpClient(QObject *parent = nullptr);
    ~TcpClient();
    static TcpClient *Instance();
private:
    static QScopedPointer<TcpClient> self;
    QTcpSocket *tcpClient;
public:
    bool connectTcpServer(const QString ip, int port);
    bool disconnectTcpServer();
    void sendData(const QString &data);
    void sendData(const QByteArray &bytes);
    void sendData(const QJsonObject &jsonobj);
    void sentData(const QJsonArray &jsonarray);
    void sentData(const QImage &image);

signals:
    void readSverDate(const QByteArray &data);
    void serverStart();
    void serverStop();


private slots:
    void readDate();
    void connected();
    void disconnected();

};

TCP服务端

class TcpServer :public QTcpServer
{
    Q_OBJECT
public:
    explicit TcpServer(QObject *parent = nullptr);
    ~TcpServer();
    static TcpServer *Instance();
private:
    //*智能指针,在其生命期结束后会自动删除它所指的对象
    static QScopedPointer<TcpServer> self;
    QTcpServer *tcpServer;
    QList<QTcpSocket *> tcpclients;
    QTcpSocket *currentClient;
public:
    bool startTcpServer(const QHostAddress &sIP, int iPort);
    void stopTcpServer();
    //指定断开
    void stopTcpServer(const QString &ip, int port);
    //指定连接发送数据   c++ 形参不同,形成函数重载
    void sendData(const QString &ip, int port, const QString &data);
    void sendData(const QString &data);
    void sendData(const QString &ip, int port, const QByteArray &bytes);
    void sendData(const QByteArray &bytes);
    void sendData(const QString &ip, int port, const QJsonObject &jsonobj);
    void sendData(const QJsonObject &jsonobj);
    void sendData(const QString &ip, int port, const QJsonArray &jsonarray);
    void sentData(const QJsonArray &jsonarray);
    void sendData(const QString &ip, int port, const QImage &image);
    void sentData(const QImage &image);

signals:
    void receiveData(const QString &ip, int port, const QByteArray &data);
    void clientConnected(const QString &ip, int port);
    void clientDisconnected(const QString &ip, int port);

private slots:

    void doclientConnected();
    void doclientDisconnected();
    void doreceiveData();
};

UDP客户端

class UdpClient :public QUdpSocket
{
    Q_OBJECT
public:
    explicit UdpClient(QObject *parent = nullptr);
    ~UdpClient();
    static UdpClient *Instance();
private:
    QUdpSocket *udpclient;
    static QScopedPointer<UdpClient> self;
public:
    void sendData(const QString &ip, int port, const QString &data);
    void sendData(const QString &ip, int port, const QByteArray &byte);
signals:
    void doreadSverData(const QString &ip, int port, const QByteArray &data);

private slots:
    void readSverData();
};

UDP服务端

class UdpServer :public QUdpSocket
{
   Q_OBJECT
public:
    explicit UdpServer(QObject *parent = nullptr);
    ~UdpServer();
    static UdpServer *Instance();
private:
   QUdpSocket *udpserver;
    static QScopedPointer<UdpServer> self;
public:
   bool startUdpServer(const QString &ip, int port);
   void stopUdpServer();
   void sendData(const QString &ip, int port, const QString &data);
   void sendData(const QString &ip, int port, const QByteArray &byte);

signals:
   void doreadClientData(const QString &ip, int port, const QByteArray &data);

private slots:
   void readClientData();
};
* 1: 四种模式,tcp客户端、tcp服务器、udp客户端、udp服务器
* 2:支持多个客户端连接并发
* 3:支持服务端单播,广播,指定断开,全部断开,断开后提示
* 4: TCP传输 json对象 byte数组  自定义结构体等!~

测试demo:
在这里插入图片描述

在这里插入图片描述

完整源码下载地址:

https://gitee.com/zlozl5566/qt-learning-notes/tree/master/

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZLOZL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值