QT开发中文网

QTcpSocket 实现异步循环收发

要实现异步循环收发数据,可以利用Qt的事件循环机制和信号槽连接来处理QTcpSocket的异步操作。下面是一个示例代码:

#include <QCoreApplication>
#include <QTcpSocket>
#include <QDebug>

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

    QTcpSocket socket;
    socket.connectToHost("localhost", 1234);

    // 建立连接后,开始循环收发数据
    if (socket.waitForConnected()) {
        QObject::connect(&socket, &QTcpSocket::connected, [&]() {
            qDebug() << "Connected to the server.";
            
            // 发送数据
            QByteArray data = "Hello, Server!";
            socket.write(data);
        });

        QObject::connect(&socket, &QTcpSocket::readyRead, [&]() {
            QByteArray response = socket.readAll();
            qDebug() << "Received data: " << response;

            // 继续发送数据或进行其他操作
            // ...
        });

        QObject::connect(&socket, &QTcpSocket::disconnected, [&]() {
            qDebug() << "Disconnected from the server.";
            
            // 结束事件循环
            QCoreApplication::quit();
        });
    } else {
        qDebug() << "Failed to connect to the server: " << socket.errorString();
        
        // 结束事件循环
        QCoreApplication::quit();
    }

    return a.exec();
}

在这个例子中,我们首先创建了一个QTcpSocket对象并与服务器建立连接。然后,通过信号槽连接方式,在相关信号触发时执行相应的操作。

  • 当成功建立连接时,connected信号触发,我们在对应的槽函数中发送数据。
  • 当接收到数据时,readyRead信号触发,我们在对应的槽函数中读取并处理接收到的数据。
  • 当与服务器断开连接时,disconnected信号触发,我们在对应的槽函数中结束事件循环并退出程序。

使用这种方式可以实现异步循环收发数据,并避免了定时器的使用。


内容由零声教学AI助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?