Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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 QLocalSocket向QLocalServer发送数据时出现问题_Qt_Qlocalsocket_Qlocalserver - Fatal编程技术网

Qt QLocalSocket向QLocalServer发送数据时出现问题

Qt QLocalSocket向QLocalServer发送数据时出现问题,qt,qlocalsocket,qlocalserver,Qt,Qlocalsocket,Qlocalserver,我正在尝试以循环的方式将一些数据从QLocalSocket发送到QLocalSever。服务器只获取第一个数据,不接收后续数据,但如果我在客户端的每次调用之间引入1个mec延迟,那么服务器将开始接收所有数据。请查看下面的客户端和服务器代码 客户端.cpp #include "client.h" #include "QDataStream" #include <QTest> TestClient::TestClient() : m_socket

我正在尝试以循环的方式将一些数据从QLocalSocket发送到QLocalSever。服务器只获取第一个数据,不接收后续数据,但如果我在客户端的每次调用之间引入1个mec延迟,那么服务器将开始接收所有数据。请查看下面的客户端和服务器代码

客户端.cpp

#include "client.h"
#include "QDataStream"
#include <QTest>

TestClient::TestClient() : m_socket{new QLocalSocket(this)}{
    m_socket->connectToServer("TestServer");
    if (m_socket->waitForConnected(1000)) {
      qDebug("socket Connected!");
    }
    connect(m_socket, &QLocalSocket::readyRead, this, &TestClient::onNewData);
}

void TestClient::onNewData() {
    qCritical() << "data received from server";
}

void TestClient::sendDataToServer() {
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_5_10);
    QString testString = "test data";
    out << quint32(testString.size());
    out << testString;
    m_socket->write(block);
    m_socket->flush();
}

void TestClient::startClient() {
    for(int i = 0; i < 5; i++) {
        //QTest::qWait(1); //works if I uncomment this line
        sendDataToServer();
    }
}
#include "server.h"

TestServer::TestServer() : m_server{new QLocalServer(this)} {
    QLocalServer::removeServer("TestServer");
    if (!m_server->listen("TestServer")) {
        qCritical() << "couldn't connect to server";
    }
    connect(m_server, &QLocalServer::newConnection, this, &TestServer::onNewConnection);
}

void TestServer::onNewConnection() {
    m_socket = m_server->nextPendingConnection();
    connect(m_socket, &QLocalSocket::readyRead, this,
            &TestServer::onNewData);
    connect(m_socket, &QLocalSocket::disconnected, m_socket,
            &QLocalSocket::deleteLater);
}

void TestServer::onNewData() {
    QLocalSocket* client = qobject_cast<QLocalSocket*>(sender());
    client->readAll();
    qCritical() << "data read by server";
}
#包括“client.h”
#包括“QDataStream”
#包括
TestClient::TestClient():m_套接字{new QLocalSocket(this)}{
m_socket->connectToServer(“TestServer”);
如果(m_插座->等待连接(1000)){
qDebug(“套接字连接!”);
}
连接(m_套接字和QLocalSocket::readyRead、this和TestClient::onNewData);
}
void TestClient::onNewData(){
qCritical()侦听(“TestServer”)){
qCritical()nextPendingConnection();
连接(m_套接字和QLocalSocket::readyRead、this、,
&TestServer::onNewData);
连接(m_插槽和QLocalSocket::断开连接,m_插槽,
&QLocalSocket::deleteLater);
}
void TestServer::onNewData(){
QLocalSocket*client=qobject_cast(sender());
client->readAll();

qCritical()为什么您认为服务器只接收第一块数据?请注意,数据连接只是一个字节流,因此客户端的多次写入不一定对应于客户端的多次读取server@G.M.是的,我在QT论坛上得到了相同的答案。我应该把这个问题留在这里还是需要关闭它?