gpt4 book ai didi

c++ - QLocalSocket 到 QLocalServer 消息在传输过程中被损坏

转载 作者:行者123 更新时间:2023-11-30 02:02:34 26 4
gpt4 key购买 nike

我没能找到类似的问题,所以这里是:

我正在跨两个应用程序将 QString 从 QLocalSocket 发送到 QLocalServer。接收 (QLocalServer) 应用程序确实收到消息,但编码似乎完全错误。

如果我从 QLocalSocket(客户端)发送一个 QString = "x",我会在 QLocalServer 中得到一个外国(中文?)符号。我的代码从字面上复制自 Nokia Developer website

如果我通过 QDebug 打印出消息,我会得到“??”。如果我在消息框中触发它,则会打印中文字符。我试过将收到的消息重新编码为 UTF-8、Latin1 等,但没有成功。

代码如下:

//Client
int main(int argc, char *argv[])
{
QLocalSocket * m_socket = new QLocalSocket();
m_socket->connectToServer("SomeServer");

if(m_socket->waitForConnected(1000))
{
//send a message to the server
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_7);
out << "x";
out.device()->seek(0);
m_socket->write(block);
m_socket->flush();
QMessageBox box;
box.setText("mesage has been sent");
box.exec();
...
}

//Server - this is within a QMainWindow
void MainWindow::messageReceived()
{
QLocalSocket *clientConnection = m_pServer->nextPendingConnection();

while (clientConnection->bytesAvailable() < (int)sizeof(quint32))
clientConnection->waitForReadyRead();


connect(clientConnection, SIGNAL(disconnected()),
clientConnection, SLOT(deleteLater()));

QDataStream in(clientConnection);
in.setVersion(QDataStream::Qt_4_7);
if (clientConnection->bytesAvailable() < (int)sizeof(quint16)) {
return;
}

QString message;
in >> message;

QMessageBox box;
box.setText(QString(message));
box.exec();
}

非常感谢任何帮助。

最佳答案

客户端正在序列化一个const char*,而服务器正在反序列化一个QString。这些不兼容。前者字面写字符串字节,后者先编码为UTF-16。所以,我猜想在服务器端,原始字符串数据“fff”被解码成 QString,就好像它是 UTF-16 数据一样……可能会导致字符 U+6666,晦。

尝试更改客户端以也序列化 QString,即

// client writes a QString
out << QString::fromLatin1("fff");

// server reads a QString
QString message;
in >> message;

关于c++ - QLocalSocket 到 QLocalServer 消息在传输过程中被损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13061079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com