以下是一个简单的 Qt TCP 客户端和服务端通信例子:

服务端代码:

#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>

class Server : public QObject
{
    Q_OBJECT
public:
    explicit Server(QObject *parent = nullptr)
        : QObject(parent), m_server(new QTcpServer(this))
    {
        connect(m_server, &QTcpServer::newConnection, this, &Server::handleNewConnection);
        m_server->listen(QHostAddress::Any, 1234); // 监听本地1234端口
    }

private slots:
    void handleNewConnection()
    {
        QTcpSocket *socket = m_server->nextPendingConnection();
        connect(socket, &QTcpSocket::readyRead, this, &Server::handleReadyRead);
        connect(socket, &QTcpSocket::disconnected, this, &Server::handleDisconnected);
    }

    void handleReadyRead()
    {
        QTcpSocket *socket = qobject_cast<QTcpSocket*>(sender());
        if (socket) {
            QByteArray data = socket->readAll();
            // 处理接收到的数据...
            qDebug() << 'Received data:' << data;
        }
    }

    void handleDisconnected()
    {
        QTcpSocket *socket = qobject_cast<QTcpSocket*>(sender());
        if (socket) {
            socket->deleteLater();
        }
    }

private:
    QTcpServer *m_server;
};

客户端代码:

#include <QtNetwork/QTcpSocket>

class Client : public QObject
{
    Q_OBJECT
public:
    explicit Client(QObject *parent = nullptr)
        : QObject(parent), m_socket(new QTcpSocket(this))
    {
        connect(m_socket, &QTcpSocket::connected, this, &Client::handleConnected);
        connect(m_socket, &QTcpSocket::readyRead, this, &Client::handleReadyRead);
        connect(m_socket, &QTcpSocket::disconnected, this, &Client::handleDisconnected);
        m_socket->connectToHost('localhost', 1234); // 连接到本地1234端口
    }

    void sendData(const QByteArray &data)
    {
        if (m_socket->state() == QAbstractSocket::ConnectedState) {
            m_socket->write(data);
            m_socket->flush();
        }
    }

private slots:
    void handleConnected()
    {
        // 连接成功
        qDebug() << 'Connected to server';
    }

    void handleReadyRead()
    {
        QByteArray data = m_socket->readAll();
        // 处理接收到的数据...
        qDebug() << 'Received data:' << data;
    }

    void handleDisconnected()
    {
        // 连接断开
        qDebug() << 'Disconnected from server';
    }

private:
    QTcpSocket *m_socket;
};

使用方法:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 启动服务端
    Server server;

    // 创建客户端并发送数据
    Client client;
    client.sendData('Hello, server!');

    return a.exec();
}

这个例子中,服务端监听本地1234端口,客户端连接到该端口,并发送数据。服务端收到数据后输出,客户端收到数据后也输出。

Qt TCP 客户端和服务端通信示例

原文地址: https://www.cveoy.top/t/topic/lQPi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录