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

C++ Qt TCP套接字-写入超过15字节,c++,qt,sockets,C++,Qt,Sockets,我的qt套接字有问题 我刚刚创建了一个TCP套接字,我想在服务器上写一条消息。 一切都很好,但当我试图写一条超过15个字符的消息时,它是随机发送的 下面是我创建套接字的方法:socket=newqtcsocket(this) 在这里我使用它: bool MainWindow::loginAction(QString usernameNow, QString passwordNow) { QString logingRequestTmp = "LOGIN " + usernameNow +

我的qt套接字有问题

我刚刚创建了一个TCP套接字,我想在服务器上写一条消息。 一切都很好,但当我试图写一条超过15个字符的消息时,它是随机发送的

下面是我创建套接字的方法:
socket=newqtcsocket(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个字节

例如:

用户名=测试,密码=测试

->服务器接收“登录测试”(15个字符)运行良好

但是用户名=test1,密码=test

->服务器接收“���" (16个字符)工作不好


Ps:当我尝试
socket->write(“123456789123456789”)
时,它工作了…只有当我传递到
socket->write()
a
const char*
时,它才不工作,因为已经创建了15个以上的字符字符串到字节的转换不再只是“假设一切都是7位ASCII”“。最好明确编码,副产品是您可以留在Qt区。放弃
std::string()
转换

我会使用socket->write()重载,它接受一个
QByteArray
,您可以从原始
QString
中获得:

socket->write(logingRequestTmp.toUtf8());

或者,如果您没有使用Utf,那么返回QbyteArray的任何其他QString函数也可以工作:
toLatin1()
,例如。

字符串到字节的转换不再只是“假设所有内容都是7位ASCII”。关于编码最好是明确的,副产品是您可以留在Qt区。放弃
std::string()
转换

我会使用socket->write()重载,它接受一个
QByteArray
,您可以从原始
QString
中获得:

socket->write(logingRequestTmp.toUtf8());

或者,如果您没有执行Utf,那么返回QbyteArray的任何其他QString函数也可以工作:
toLatin1()
,例如。

我尝试了QIODevice::write(数据,qstrlen(数据));与文档中类似,但不起作用:socket->write(loginRequest,qstrlen(loginRequest));我尝试了QIODevice::write(数据,qstrlen(数据));与文档中类似,但不起作用:socket->write(loginRequest,qstrlen(loginRequest));谢谢你,彼得!为我工作!!谢谢你,彼得!为我工作!!