c++ - Qt TCP 套接字 - 写入超过 15 个字节

标签 c++ qt sockets

我有一个关于 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/

相关文章:

c++ - closesocket() 未完成 IOCP 的挂起操作

c++ - macOS 中/proc 是否有替代方案?

json - Qt 的最佳 JSON 解析器?

带有项目委托(delegate)的 QTListView - 选定项目的更高项目行

c++ - 从 C++ 中的文件读取到行尾?

c++ - MFC:创建无模式对话框而不显示

qt - 在qt中呈现的svg中的多行居中文本

当队列中没有连接时,C 套接字 accept() 失败

c - 多次重复使用原始套接字或创建新套接字

java - Android 不抛出 SocketException?