QLocalSocket не получает данные - PullRequest
0 голосов
/ 22 июня 2019

Сокет в handleIPCLoad () не получает никаких данных.

Я сделал проверку в конструкторе, чтобы увидеть, сколько байтов было отправлено (если есть), и получил исправленный результат 60 для строки C: \Mech Designer от MasterBLB \ Mech Designs \ SDR-5V.mechDesign В слоте я пробовал waitForRead (), но это не сработало.

Так что я делаю не так ?? *

//QString Application::ipcKey = MechDesignerByMasterBLBServerKey;
//QSharedMemory shared; <- in header file
InstanceGuard::InstanceGuard(int argc, char **argv, MainWindow *w)
:argc(argc), argv(argv), window(w), shared(Application::ipcKey)
{
    if (shared.create(1))
    {
        QLocalServer::removeServer(Application::ipcKey);
        server = new QLocalServer();
        server->setSocketOptions(QLocalServer::UserAccessOption);
        server->listen(Application::ipcKey);
        connect(server, SIGNAL(newConnection()), this, SLOT(handleIPCLoad()));

        if (argc > 1)
        {
            QStringList files;
            files << QString::fromLocal8Bit(argv[1]);
            window->loadMech(files);
        }
    }
    else if (shared.error() == QSharedMemory::AlreadyExists && argc > 1)
    {
        QLocalSocket socket;
        socket.connectToServer(Application::ipcKey);

        // Wait for being connected
        if (socket.state() == QLocalSocket::ConnectingState )
        {
            socket.waitForConnected(250);
        }

        auto writtenBytes = socket.write(argv[1]);
        QMessageBox::information(0, "Written bytes", QString::number(writtenBytes));
        socket.flush();
        socket.waitForBytesWritten(250);

        exit(-4);
    }
}

void InstanceGuard::handleIPCLoad()
{
    QLocalSocket *socket = server->nextPendingConnection();
    socket->waitForConnected(250);
    QStringList fileToLoad;
    fileToLoad.append(socket->readAll());
    socket->waitForReadyRead(250);
    QMessageBox::information(window, 0, fileToLoad.at(0));
    window->loadMech(fileToLoad);
}
...