首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭前将数据作为客户端发送到QLocalServer时出现问题

关闭前将数据作为客户端发送到QLocalServer时出现问题
EN

Stack Overflow用户
提问于 2018-12-21 16:38:13
回答 1查看 1.2K关注 0票数 2

在关闭客户端应用程序之前,我正在学习Qt,并且在向QLocalServer发送一些数据时遇到了一些问题。在这个例子中,我尝试过两次发送“拜拜”。但在服务器端,我只收到过一次。无论客户端在关闭前发送多少次,服务器都将收到唯一的第一条消息。如果我使用QCloseEvent,那么车辙是一样的。也许我做错了什么?谢谢你的帮助!

简化服务器示例

代码语言:javascript
复制
MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        server = new QLocalServer(this);
        server->listen("Server1");
        connect(server, SIGNAL(newConnection()), this, SLOT(processNewConnection()));

    }


    void MainWindow::processNewConnection()
    {
       clientConnection = new QLocalSocket(this);
       clientConnection = server->nextPendingConnection();
       connect(clientConnection,SIGNAL(readyRead()), this, SLOT(proceessData()));
    }

    void MainWindow::proceessData()
    {
        QLocalSocket* clientSocket = (QLocalSocket*)sender();
        QByteArray recievedData;
        recievedData = clientSocket -> readAll();
    }

这就是客户端的例子。

代码语言:javascript
复制
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    localSocket = new QLocalSocket(this);
    localSocket -> connectToServer("Server1");
    QByteArray hey("Hey");
    localSocket->write(hey);
}

MainWindow::~MainWindow()
{
    QByteArray bye("bye");
    localSocket->write(bye);
    localSocket->write(bye);
    delete ui;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-22 00:48:18

在关闭套接字之前,您应该使用waitForBytesWritten()确保数据被发送到底层系统缓冲区。

代码语言:javascript
复制
MainWindow::~MainWindow()
{
    QByteArray bye("bye");

    localSocket->write(bye);
    localSocket->write(bye);

    localSocket->waitForBytesWritten(); //<-- wait for data sent out.

    delete ui;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53888154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档