Russian Qt Forum

Qt => Вопросы новичков => Тема начата: paibolit от Сентябрь 02, 2020, 11:23



Название: QT 5.15 не хочет принять код стандартного примера
Отправлено: paibolit от Сентябрь 02, 2020, 11:23
С помощью примера из просторов сети хочу разобраться с TCP соединением двух машин. Пример клиента скомпилился нормально, а пример сервера уже при написании ругается....
Код:
void MyServer::slotNewConnection()
{
    QTcpSocket* pClientSocket = m_ptcpServer->nextPendingConnection();
    connect(pClientSocket, SIGNAL(disconnected()),
            pClientSocket, SLOT(deleteLater())
           );
    connect(pClientSocket, SIGNAL(readyRead()),
            this,          SLOT(slotReadClient())
           );

    sendToClient(pClientSocket, "Server Response: Connected!");
}
void MyServer::slotReadClient()
{
    QTcpSocket* pClientSocket = (QTcpSocket*)sender();
    QTcpSocket *tcpSocket = (QTcpSocket*)sender();
    QDataStream clientReadStream(&tcpSocket);
    QDataStream in(pClientSocket);
    in.setVersion(QDataStream::Qt_5_7);
    for (;;) {
        if (!m_nNextBlockSize) {
            if (pClientSocket->bytesAvailable() < sizeof(quint16)) {
                break;
            }
            in >> m_nNextBlockSize;
        }

        if (pClientSocket->bytesAvailable() < m_nNextBlockSize) {
            break;
        }
        QTime   time;
        QString str;
        in >> time >> str;

        QString strMessage =
            time.toString() + " " + "Client has sended - " + str;
        m_ptxt->append(strMessage);

        m_nNextBlockSize = 0;

        sendToClient(pClientSocket,
                     "Server Response: Received \"" + str + "\""
                    );
    }
}
(https://cdn1.savepice.ru/uploads/2020/9/2/e7e6de3ac3e10e7688bf1b2a346e2eae-prev.jpg) (https://savepice.ru/full/2020/9/2/e7e6de3ac3e10e7688bf1b2a346e2eae-full.jpg.html) uploads (https://savepice.ru/news/all-photo-hosting/instrukciya-po-razmescheniyu-izobrazhenij-na-fotohostinge-uploads.html)


Название: Re: QT 5.15 не хочет принять код стандартного примера
Отправлено: Пантер от Сентябрь 02, 2020, 11:49
У тебя тут несколько глупых ошибок - внимательно прочитай их, посмотри документацию и у тебя все получится. Для примера,
QDataStream clientReadStream(&tcpSocket);
стоит заменить на
QDataStream clientReadStream(tcpSocket);


Название: Re: QT 5.15 не хочет принять код стандартного примера
Отправлено: paibolit от Сентябрь 02, 2020, 12:40
Смотрел я документацию... Если бы всё понял и был бы не новичком, не задавал бы глупых вопросов уважаемым и занятым людям.........
Строка на которую указали - это уже были истерические )) попытки исправить ситуацию  ;D(просто вставил две строки из похожего кода чтобы убедится что проблема не в компиляторе). Эта строка и предыдущая к данному коду не относятся....


Название: Re: QT 5.15 не хочет принять код стандартного примера
Отправлено: Пантер от Сентябрь 02, 2020, 12:49
Я могу тебе точно сказать, что проблема не в компиляторе. :) Сделай #include <QtNetwork/QTcpSocket> вверху файла, часть ошибок уйдет.