QT网络通讯之QServer

5 篇文章 0 订阅

直接给出QServer的测试代码

在pro文件中添加network不然会报错找不到文件
QT

mysocket.h如下:

#ifndef MYSOCKET_H
#define MYSOCKET_H

#include <QTcpServer>
#include <QTcpSocket>
#include <QObject>


class MySocket: public QObject
{
    Q_OBJECT
public:
    MySocket();
    void sendData(QString msg);
    void startRunSocket(QString ip, int port);
    void closeSocket();

signals:
    void clientData(QString msg);

private slots:
    void connectServer();
    void disconnectServer();
    void readClient();

private:
    QTcpServer* m_pTcpServer;
    QTcpSocket* m_client;
};

#endif // MYSOCKET_H

mysocket.cpp如下:

#include "mysocket.h"
#include <QDebug>

MySocket::MySocket()
{
    this->m_pTcpServer = new QTcpServer();
    connect(m_pTcpServer, &QTcpServer::newConnection, this, &MySocket::connectServer);
    this->m_client = nullptr;
}

void MySocket::sendData(QString msg)
{
    if(this->m_client == nullptr)
    {
        return;
    }
    this->m_client->write(msg.toUtf8());
}

void MySocket::startRunSocket(QString ip, int port)
{
    if(this->m_pTcpServer == nullptr)
    {
        this->m_pTcpServer = new QTcpServer();
        connect(m_pTcpServer, &QTcpServer::newConnection, this, &MySocket::connectServer);
        this->m_client = nullptr;
    }
    bool ret = this->m_pTcpServer->listen(QHostAddress(ip), port);
    if(!ret)
    {
        qDebug() << "TCP Server Listen Error!";
    }
}

void MySocket::closeSocket()
{
    if(this->m_client)
    {
        this->m_client->close();
        this->m_client->deleteLater();
        this->m_client = nullptr;
    }
    this->m_pTcpServer->close();
    this->m_pTcpServer = nullptr;
}

void MySocket::connectServer()
{
    this->m_client = this->m_pTcpServer->nextPendingConnection();
    //建立链接函数
    connect(m_client, &QTcpSocket::readyRead, this, &MySocket::readClient);
    connect(m_client, &QTcpSocket::disconnected, this, &MySocket::disconnectServer);
    this->sendData("hello client!");
}

void MySocket::disconnectServer()
{
    this->m_client->close();
    this->m_client->deleteLater();
    this->m_client = nullptr;
}

void MySocket::readClient()
{
    QByteArray data = this->m_client->readAll();
    qDebug() << "get data :" << data;
    emit clientData(data);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值