QT开发中文网

QTCP按行读取json文件,循环发送给客户端

以下是一个使用QTcpSocket按行读取JSON文件并循环发送给客户端的示例代码:

#include <QtCore>
#include <QtNetwork>

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

    QTcpServer server;
    if (!server.listen(QHostAddress::Any, 1234)) {
        qCritical() << "Failed to listen on port 1234";
        return 1;
    }
    qDebug() << "Server is listening on" << server.serverAddress().toString() << ":" << server.serverPort();

    QFile file("data.json");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qCritical() << "Failed to open data.json";
        return 1;
    }

    QStringList messages;
    while (!file.atEnd()) {
        QByteArray line = file.readLine().trimmed();
        if (!line.isEmpty())
            messages.append(line);
    }
    qDebug() << "Read" << messages.count() << "messages from data.json";

    int currentMessageIndex = 0;

    QObject::connect(&server, &QTcpServer::newConnection, [&](){
        QTcpSocket *socket = server.nextPendingConnection();
        qDebug() << "New connection from" << socket->peerAddress().toString() << ":" << socket->peerPort();

        QObject::connect(socket, &QTcpSocket::disconnected, [socket](){
            qDebug() << "Disconnected from" << socket->peerAddress().toString() << ":" << socket->peerPort();
            socket->deleteLater();
        });

        QObject::connect(socket, &QTcpSocket::readyRead, [=](){
            while (socket->canReadLine()) {
                QString line = QString::fromUtf8(socket->readLine()).trimmed();
                qDebug() << "Received:" << line;
            }
        });

        if (!messages.isEmpty()) {
            QByteArray message = messages[currentMessageIndex].toUtf8() + "\n";
            qDebug() << "Sending:" << message.trimmed();
            socket->write(message);
            currentMessageIndex = (currentMessageIndex + 1) % messages.count();
        } else {
            qDebug() << "No messages to send";
        }
    });

    return a.exec();
}

这个示例程序首先启动一个QTcpServer并监听端口1234。然后它打开名为data.json的文件,并将其中的每一行解析为JSON消息,存储在一个QStringList中。

当有新的客户端连接时,它会创建一个QTcpSocket对象来处理与该客户端的通信。当从客户端接收到数据时,它会使用qDebug()输出该数据。

如果存在要发送的消息,则将下一条消息作为JSON格式发送到客户端,并将当前消息索引递增。如果没有消息可以发送,则不会发送任何东西。

注意,在此示例中,我们假设JSON文件中的每行都是有效的JSON消息。如果文件包含空行或格式不正确的行,则可能会导致问题。在实际应用中,请确保您的文件格式正确。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=819

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?