簡體   English   中英

Qt TCP 套接字 - 寫入超過 15 字節

[英]Qt TCP socket - Write more that 15bytes

我對 qt sockets 有疑問...

我剛剛創建了一個 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 個字節。?

示例:

使用用戶名 = 測試和密碼 = 測試

-> 服務器收到“LOGIN test test”(15 個字符)運行良好!

但是使用用戶名 = test1 和密碼 = test

-> 服務器收到“���”(16 個字符)不能正常工作...

Ps:當我嘗試socket->write("123456789123456789")它工作...只有當我傳遞給socket->write()一個const char*已經用 15+ 個字符創建時才工作

字符串到字節的轉換不再只是“假設一切都是 7 位 ASCII”。 最好明確編碼,副產品是您可以留在 Qt 領域。 放棄std::string()轉換。

我將使用帶有QByteArray的 socket->write() 重載,您可以從原始QString獲得它:

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

或者,如果您不使用 Utf,則返回 QByteArrays 的任何其他 QString 函數也可以工作:例如toLatin1()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM