我有一个关于 qt 套接字的问题...
我刚刚创建了一个 TCP 套接字,我想在服务器上写一条消息。 一切正常,但是当我尝试写一条超过 15 个字符的消息时,它发送的是随机的东西......
这是我创建套接字的方法:socket = new QTcpSocket(this);
这里是我使用它的地方:
bool MainWindow::loginAction(QString usernameNow, QString passwordNow) {
QString logingRequestTmp = "LOGIN " + usernameNow + " " + passwordNow;
const char* loginRequest= logingRequestTmp.toStdString().c_str();
socket->write(loginRequest);
return true;
}
那么有没有一种简单的方法可以在 socket->write()
中说我想写超过 15 个字节。?
例子:
使用用户名 = test 和密码 = test
-> 服务器收到“LOGIN 测试测试”(15 个字符)运行良好!
但是使用用户名=test1 和密码=test
-> 服务器收到“����”(16 个字符)无法正常工作......
Ps :当我尝试 socket->write("123456789123456789")
时,它起作用了……只有当我传递给 socket->write()
时才不起作用> 已经创建了超过 15 个字符的 const char*
最佳答案
字符串到字节的转换不再只是“假设一切都是 7 位 ASCII”。最好明确编码,副产品是您可以留在 Qt 领域。放弃 std::string()
转换。
我将使用带有 QByteArray
的 socket->write() 重载,您可以从原始 QString
中获取它:
socket->write(logingRequestTmp.toUtf8());
或者如果您不使用 Utf,则返回 QByteArrays 的任何其他 QString 函数也可以工作:例如 toLatin1()
。
关于c++ - Qt TCP 套接字 - 写入超过 15 个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58188349/