C++ QLocalSocket不';我什么也不寄

C++ QLocalSocket不';我什么也不寄,c++,qt,ipc,qlocalsocket,C++,Qt,Ipc,Qlocalsocket,嗯,我仍在尝试让IPC通过QLocalSocket运行。 显然我的套接字连接了,连接被接受了,但是当我尝试发送一些东西时 void ServiceConnector::send_MessageToServer(QString message) { if(!connected){ m_socket->connectToServer(m_serverName); m_socket->waitForConnected(); }

嗯,我仍在尝试让IPC通过QLocalSocket运行。 显然我的套接字连接了,连接被接受了,但是当我尝试发送一些东西时

void ServiceConnector::send_MessageToServer(QString message) {

    if(!connected){
        m_socket->connectToServer(m_serverName);
        m_socket->waitForConnected();

    }

    char str[] = {"hallo welt\0"};
    int c = m_socket->write(str,strlen(str));
    qDebug() << "written: " << c;
}
服务器:

[Debug]: incoming connection
[Debug]: socket is ready to be read
[Debug]: open: true
[Debug]: readable: true
套接字的readReady()信号从未发出,因此我决定使用

clientConnection->waitForReadyRead();
socket_readReady();
…但显然这也不起作用
waitForReadyRead
在客户端的
write
函数之后立即启动,我认为这意味着它现在可以读取了


[编辑]auto conn=connection(…)用于调试,以检查它们是否正确连接。注意:您应该真正检查waitForConnected()的返回值。如果客户机无法连接到服务器,那么进一步操作就没有意义了


但我认为您的实际问题是,您正在编写一个简单的8位字符串,如“hallo welt\0”,但您使用的是QDataStream,它需要二进制格式(对于QString,这意味着unicode,长度优先),这不匹配。

if(clientConnection->bytesAvailable()<(int)sizeof(quint16)){
此检查看起来可疑。请尝试删除它,看看会发生什么。这只是检查是否至少有一个字节是可读的。我删除它是为了调试,但这不会改变任何内容;仍然没有任何内容可读取。客户端似乎收到连接信号,然后立即向服务器发送数据。每当我编写客户端-服务器代码时,我总是让客户端连接,然后在连接上,服务器发送一个“ok”数据包。当客户端接收到“ok”时,它会继续向服务器发出请求。我想知道您的客户端先发送数据是否会导致服务器的readyRead()丢失数据。好吧,这不是问题,问题是套接字不会写入。如果我给出buytesToWrite(),它的字节数与write()函数写入的字节数相同。但是如果我使用WaitForBytesWrite(),它只会挂起,直到超时发生。flush也不会做任何事情。。。
[Debug]: incoming connection
[Debug]: socket is ready to be read
[Debug]: open: true
[Debug]: readable: true
clientConnection->waitForReadyRead();
socket_readReady();