Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 关闭前将数据作为客户端发送到QLocalServer时出现问题_Qt_Qlocalsocket_Qlocalserver - Fatal编程技术网

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

Qt 关闭前将数据作为客户端发送到QLocalServer时出现问题,qt,qlocalsocket,qlocalserver,Qt,Qlocalsocket,Qlocalserver,我正在学习Qt,在关闭客户端应用程序之前向QLocalServer发送一些数据时遇到了一些问题。在这个例子中,我尝试发送了两次“再见”。但在服务器端,我只收到过一次。无论客户端在关闭前发送多少次if,服务器都只会收到第一条消息。如果我使用QCloseEvent,结果是相同的。也许我做错了什么?谢谢你的帮助 简化了服务器的示例 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new

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

简化了服务器的示例

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();
    }
这就是客户机的例子

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;
}

您应该使用
waitForBytesWrite()
确保在关闭套接字之前将数据发送到基础系统缓冲区

MainWindow::~MainWindow()
{
    QByteArray bye("bye");

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

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

    delete ui;
}
MainWindow::~MainWindow()
{
再见(“再见”);
localSocket->write(再见);
localSocket->write(再见);
localSocket->WaitForBytesWrite()//