Сокет Qt TCP - записать больше 15 байтов - PullRequest
1 голос
/ 01 октября 2019

У меня проблема с сокетами 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 байтов.?

Например:

сusername = test и password = test

-> Сервер получает "LOGIN test test" (15 символов) работает хорошо!

Но с именем пользователя = test1 и паролем = test

-> Сервер получает "���" (16 символов) не работает хорошо ...

Ps: Когда я пытаюсь socket->write("123456789123456789"), это работает ... только не работает, когда я перехожу на socket->write() a const char* уже создан с 15+ символами

1 Ответ

3 голосов
/ 01 октября 2019

Преобразование строки в байт больше не просто "предполагает, что все 7-битный ASCII". Лучше быть ясно о кодировании, и побочным продуктом будет то, что вы останетесь на земле Qt. Откажитесь от преобразования std::string().

Я бы использовал перегрузку socket-> write (), которая принимает QByteArray, которую вы можете получить из оригинального QString:

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

или если вы не используете Utf, то любая из других функций QString, которые возвращают QByteArrays, тоже работает: toLatin1(), например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...