Ошибка при скачивании remotehostclosederror

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

      • 1

      ребята помогите столкнулся с проблемой после обновления вот теперь даже игра скачать не могу выдет ошибку сразу после захода в лаунчер испытать переустановить и загрузить обе версии игры од и таже ошибка и там и там

      Ошибка при загрузке: RemoteHostClosedError
      Windows/LooseMedia29.pck.zip
      CDN Info:gn-up-gc19(92.223.97.97),,

      • 2

      Здравствуйте,

      Если проблема сохраняется, пожалуйста пройдите по ссылке iam.gcdn.co/info/json и предоставьте информацию, которую вам выдаст браузер (можно мне в личные сообщения). Мы расследуем проблему и ваша помощь поможет быстрее ее решить!

      • 3

      вот что он мне выдал
      игра так же не работает в обоих версиях клиента

      Bilder

      • Снимок экрана 2023-02-14 065404.png

        27,23 kB, 948×323, 209 mal angesehen

      • 4

      По данным большинства игроков столкнувшихся с этой проблемой, помогает подключение через VPN или мобильную сеть. Попробуйте пожалуйста.

      • 5
      • 6

      Помогло зайти через Steam.

      • 7

      SirisLi schrieb:

      По данным большинства игроков столкнувшихся с этой проблемой, помогает подключение через VPN или мобильную сеть. Попробуйте пожалуйста.

      На кой ляд вы тогда такие хорошие нужны если вместо того что бы запустить и играть я должен что то пробовать и устанавливать?

      • 8

      UucycJluk schrieb:

      Ошибка при загрузке: RemoteHostClosedError
      Windows/LooseMedia29.pck.zip
      CDN Info:gn-up-gc19(92.223.97.97),,

      Только что закрыл браузер,и кликал до одури опцию «Повторить».За шестым разом оно таки установило и игру и все патчи.

      • 9

      Помогает установка версии Стим и копирование папки game с заменой файлов в оригинальном дистрибутиве.. хз как это работает, но работает.

    • Teilen

    I was learning the Github API and wanted to create an Issue on github by Qt.

    But, when I submit my Issue, the «Debug Console» said

    QNetworkReply::RemoteHostClosedError
    

    (I catched error).

    I don’t know why, please help me!

    Code on Github:

    void MainWindow::on_pushButton_2_clicked()
    {
        QString id = ui->ID_Send->text();
        QJsonObject JJ;
        QJsonDocument jd;
        JJ["title"] = ui->Title->text();
        JJ["body"] = ui->Comment->toPlainText();
        QHttpMultiPart *part = new QHttpMultiPart(QHttpMultiPart::FormDataType);
        QHttpPart info;
        info.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/json"));
        jd.setObject(JJ);
        info.setBody(jd.toJson());
        part->append(info);
    
        QNetworkRequest request;
        qDebug()<<"https://api.github.com/repos/MoyuSteve/Comment/issues?client_id="+
                  client_id+"&client_secret="+client_secret;
        request.setUrl(QUrl("https://api.github.com/repos/MoyuSteve/Comment/issues?client_id="+
                            client_id+"&client_secret="+client_secret));
        QNetworkReply* reply = manager->post(request,part);
        QObject::connect(reply, &QNetworkReply::finished, [reply, this] () {
            if (reply->error() == QNetworkReply::NoError) {
                ui->status->setText("ok");
            } else {
                ui->status->setText("failed");
                qDebug()<<reply->error();
            }
            reply->deleteLater();
        });
    }
    

    1. 1. QNetworkReply::ConnectionRefusedError и QNetworkReply::RemoteHostClosedError
    2. 2. QNetworkReply::HostNotFoundError
    3. 3. QNetworkReply::TimeoutError
    4. 4. QNetworkReply::OperationCanceledError
    5. 5. QNetworkReply::SslHandshakeFailedError
    6. 6. QNetworkReply::TemporaryNetworkFailureError и QNetworkReply::NetworkSessionFailedError
    7. 7. QNetworkReply::BackgroundRequestNotAllowedError
    8. 8. QNetworkReply::TooManyRedirectsError и QNetworkReply::InsecureRedirectError
    9. 9. Ошибки QNetworkReply::Proxy*
    10. 10. QNetworkReply::ContentAccessDenied
    11. 11. QNetworkReply::AuthenticationRequiredError
    12. 12. QNetworkReply::ContentReSendError
    13. 13. QNetworkReply::ContentConflictError
    14. 14. QNetworkReply::ContentGoneError
    15. 15. QNetworkReply::InternalServerError
    16. 16. QNetworkReply::OperationNotImplementedError
    17. 17. QNetworkReply::ProtocolUnknownError
    18. 18. QNetworkReply::ServiceUnavailableError
    19. 19. QNetworkReply::ProtocolInvalidOperationError
    20. 20. QNetworkReply::UnknownNetworkError
    21. 21. QNetworkReply::UnknownProxyError
    22. 22. Ошибки QNetworkReply::UnknownContentError,QNetworkReply::ProtocolFailure, QNetworkReply::UnknownServerError
    23. 23. Пример с выводом ошибки в qDebug

    В одном из уроков была представлена работа с

    QNetworkAccessManager

    для получения содержимого страницы с сайта по протоколу

    http.

    Там была сделана проверка на наличие ошибок, но не были даны пояснения, какие могут быть ошибки. Для этого класс

    QNetworkReply

    предоставляет

    enum NetworkError

    , в котором перечислены коды возможных ошибок.

    В случае успешного выполнения возвращается

    NoError

    , равный

    0

    .

    В противном случае возвращается код ошибки из кодов, представленных ниже:


    Константа Значение Описание
    QNetworkReply::ConnectionRefusedError
    1
    Удалённый сервер отклонил соединение (сервер не принимает запросы)
    QNetworkReply::RemoteHostClosedError
    2
    удаленный сервер закрыл соединение преждевременно, до того, как весь ответ был получен и обработан
    QNetworkReply::HostNotFoundError
    3
    удаленный хост не был найден (недействительное имя хоста)
    QNetworkReply::TimeoutError
    4
    подключение к удаленному серверу истекло
    QNetworkReply::OperationCanceledError
    5
    операция была отменена через вызов abort() или close() до того, как была завершена.
    QNetworkReply::SslHandshakeFailedError
    6
    Подключение по SSL/TLS не удалось, шифрованный канал не может быть. Должен испускаться сигнал sslErrors().
    QNetworkReply::TemporaryNetworkFailureError
    7
    соединение было нарушено из-за отключения от сети, однако система инициировала роуминг к другой точке доступа. Запрос должен быть повторно и будет обработан, как только соединение будет восстановлено.
    QNetworkReply::NetworkSessionFailedError
    8
    соединение было нарушено из-за отключения от сети или невозможности запуска сети.
    QNetworkReply::BackgroundRequestNotAllowedError
    9
    запрос в настоящее время не допускается из-за политики платформы.
    QNetworkReply::TooManyRedirectsError
    10
    количество редиректов превысило допустимый лимит. Лимит по умолчанию установлен на 50 редиректов через QNetworkRequest::setMaxRedirectsAllowed().
    QNetworkReply::InsecureRedirectError
    11
    во время обработки редиректов, API доступа по сети обнаружило редирект с  шифрованного протокола (https) на не шифрованный (http)
    QNetworkReply::ProxyConnectionRefusedError
    101
    в подключении к прокси-серверу было отказано (прокси-сервер не принимает запросы)
    QNetworkReply::ProxyConnectionClosedError
    102
    прокси-сервер закрыл соединение преждевременно, до того, как весь ответ был получен и обработан
    QNetworkReply::ProxyNotFoundError
    103
    прокси-хост не был найден (недействительное имя прокси хоста)
    QNetworkReply::ProxyTimeoutError
    104
    подключение к прокси-серверу истекло или прокси-сервер не ответил вовремя на отправленный запрос
    QNetworkReply::ProxyAuthenticationRequiredError
    105
    прокси-сервер требует аутентификации для того, чтобы удовлетворить запрос, но не принял каких-либо предложенных учётных данных (если таковые имеются)
    QNetworkReply::ContentAccessDenied
    201
    в доступе к удаленному контенту было отказано (по аналогии с ошибкой HTTP 401)
    QNetworkReply::ContentOperationNotPermittedError
    202
    Запрошенная операция на удаленное содержимое не допускается
    QNetworkReply::ContentNotFoundError
    203
    удаленный контент не был найден на сервере (аналогично ошибке HTTP 404)
    QNetworkReply::AuthenticationRequiredError
    204
    удаленный сервер требует аутентификации, чтобы предоставить контент, но предоставленные учетные данные не были приняты (если таковые имеются)
    QNetworkReply::ContentReSendError
    205
    запрос необходимо отправить повторно, но это не удалось, например, потому что загрузка данных не может быть прочитана во второй раз.
    QNetworkReply::ContentConflictError
    206
    запрос не может быть завершен из-за конфликта с текущим состоянием ресурса.
    QNetworkReply::ContentGoneError
    207
    запрошенный ресурс больше не доступен на сервере.
    QNetworkReply::InternalServerError
    401
    Сервер столкнулся с непредвиденным условием, которое не позволяет ему выполнить запрос.
    QNetworkReply::OperationNotImplementedError
    402
    сервер не поддерживает функциональные возможности, необходимые для выполнения запроса.
    QNetworkReply::ServiceUnavailableError
    403
    сервер не может обработать запрос в данный момент.
    QNetworkReply::ProtocolUnknownError
    301
    Network Access API не может удовлетворить запрос, потому что протокол не известен
    QNetworkReply::ProtocolInvalidOperationError
    302
    запрошенная операция недопустима для этого протокола
    QNetworkReply::UnknownNetworkError
    99
    была обнаружена неизвестная ошибка сети
    QNetworkReply::UnknownProxyError
    199
    была обнаружена неизвестная ошибка прокси
    QNetworkReply::UnknownContentError
    299
    была обнаружена неизвестная ошибка, связанная с удаленным содержимым
    QNetworkReply::ProtocolFailure
    399
    был обнаружен сбой в протоколе (ошибка синтаксического анализа, недействительные или неожиданные ответы и т.д.)
    QNetworkReply::UnknownServerError
    499
    была обнаружена неизвестная ошибка, связанная с ответом сервера

    После изучения данного списка ошибок можно сделать вывод, что данный список объединяет в себе значительно больший список ошибок, чем, например, тот список кодов ошибок, который может вернуть http сервер. Давайте поговорим немного о возможных ошибках и из-за чего они могут возникнуть.

    QNetworkReply::ConnectionRefusedError и QNetworkReply::RemoteHostClosedError

    Если говорить об интерпретации данных ошибок, то наиболее ярким примером для меня является подключение по SSH к другому хосту. Смысл ошибок в том, что в первом случае сервер нас не пускает, а во втором случае соединение могло быть закрыто по истечению определённого периода времени.

    Также ошибка ConnectionRefusedError может возникать в случаях, когда на определённом порту ПК просто нет службы, которая могла бы обработать запрос.

    QNetworkReply::HostNotFoundError

    Пожалуй довольно понятная ошибка, которая обозначает, что вы просто ввели неверный ip адрес или домен, с которого пытаетесь получить данные. Также, такая ошибка может возникнуть в том случае, если домен перестал быть доступен в сети. Данная ошибка аналогична ошибке номер

    105 —

    ERR_NAME_NOT_RESOLVED (HTTP).

    QNetworkReply::TimeoutError

    Превышен интервал ожидания. Наиболее близкое сравнение — это использование протокола ICMP, проверка доступности узла в сети, когда производим его ping. То есть узел в сети вроде бы и есть, но он не отвечает.

    QNetworkReply::OperationCanceledError

    А вот ошибка, которая будет относится уже к действиям самой программы на Qt. В данном случае она будет возникать тогда, когда логика программы прерывает получение данных через

    QNetworkAccessManager.

    То есть данная ошибка не должна возникать в том случае, если операция получения данных была прервана извне. Поэтому, если Вы отлавливаете подобную ошибку, то ищите проблему внутри вашей собственной программы.

    QNetworkReply::SslHandshakeFailedError

    Для установления шифрованных каналов связи, которые используют SSL шифрование, требуется установка соединения через операции квитирования, то есть через подтверждение приёма/передачи информации. В данном случае осуществляется согласование параметров шифрования, передача сеансового ключа, а также необязательные операции аутентификации сервера клиентом и клиента сервером. Если что-то из перечисленного пойдёт не так, то будет выброшена данная ошибка.

    QNetworkReply::TemporaryNetworkFailureError и QNetworkReply::NetworkSessionFailedError

    Возникновение данных ошибок может быть вызвано любой неполадкой в сети вплоть до падения физического подключения к сети. Проверять подключения можно через класс

    QNetworkInterface.

    Класс

    QNetworkInterface

    имеет статический метод

    QList

    QNetworkInterface::allInterfaces()

    , который возвращает список всех интерфейсов на вашем ПК. При этом будут учитываться абсолютно все соединения, вплоть до соединений, которые были созданы для виртуальной машины, например, для

    Virtual Box.

    Тут к слову возникает очень интересный момент, когда ведётся разработка программного обеспечения, которое должно работать по сети, и при этом у разработчика имеется виртуальная машина на борту, особенно если она запущена, то необходимо учитывать этот момент, поскольку программа может пытаться получить данные через соединение с виртуальной машиной, то есть будет считать что сеть доступна, хотя разработчик будет тестировать User Case при отключённом соединении. Впрочем, даже выключенная виртуальная машина будет вызывать некоторые проблемы, поскольку соединение будет активно, хотя Link и не будет поднят.

    Поэтому, чтобы понять, что не так, при получении ошибок

    QNetworkReply::TemporaryNetworkFailureErro

    r и

    QNetworkReply::NetworkSessionFailedError

    придётся протестировать интерфейсы ПК на предмет активности:

    QNetworkInterface::IsUp

    и

    QNetworkInterface::IsRunning.

    QNetworkReply::BackgroundRequestNotAllowedError

    А вот эта ошибка зависит непосредственно от политик платформы, для которой разрабатывается приложение. Например, если под некоторым абстрактным Android устройством запрещён обмен информацией по сети в энергосберегающем режиме, то в данном режиме мы будем получать именно эту ошибку, при попытке обмена информацией.

    QNetworkReply::TooManyRedirectsError и QNetworkReply::InsecureRedirectError

    А вот эти ошибки из разряда новенького в Qt 5.6. Теперь можно отслеживать превышения количества редиректов со страниц сайтов, а также редиректы со страниц с шифрованием https на страницы без шифрования. Что может быть полезно для разработки программного обеспечения для анализа сайтов.

    Без дополнительных настроек данные ошибки как правило не возникают. Дело в том, что когда задаётся

    QNetworkRequest

    и в него не устанавливаются флаги конфигурации, то при попытке запроса страницы с сайта, с которой осуществляется редирект, не будет происходить перехода на новый url, а в

    QNetworkReply

    не будет никакого полезного контента. Поэтому потребуется установить в

    QNetworkRequest

    флаг

    QNetworkRequest::FollowRedirectsAttribute,

    тогда QNetworkAccessManager будет переходить по редиректам, пока не получит итоговую страницу или не превысит ограничение на количество переходов. По умолчанию количество переходов ограничено 50-ю.

    Установка атрибута может производиться следующим образом:

    QNetworkRequest request;  
    request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, QVariant(true));
    

    Что касается

    QNetworkReply::InsecureRedirectError,

    то смысл заключается в том, чтобы отследить редирект на небезопасный протокол.

    Ошибки QNetworkReply::Proxy*

    Следующие пять ошибок аналогичны по своему характеру ошибкам подключения к серверам без проксирования.

    QNetworkReply::ContentAccessDenied

    В документации сказано, что данная ошибка аналогична ошибке 401 в HTTP, то есть требуется авторизация, но полагаю, что данная ошибка может возникать и в случаях получения кода 403 и 407. Ошибка 407 аналогична ошибке 401, но используется для прокси-сервера. А ошибка 403 является порождающей для ошибок 401 и 407.

    QNetworkReply::AuthenticationRequiredError

    Данная ошибка характерна для HTTP протокола. Дело в том, что http протокол поддерживает схемы проверки подлинности. В данном случае необходимо посылать запрос на сервер с установкой логина и пароля. Замечу, что это напрямую означает то, что Вы можете написать приложение на Qt, которое будет аутентифицироваться на сайтах и выполнять определённые действия на сайте уже в авторизованном режиме, то есть можно написать и бота для работы на сайте.

    Решение проблемы заключается в том, чтобы установить логин и пароль пользователя в  QAuthenticator, который будет подмешивать учётные данные к запросу. Причем делаться это будет в автоматическом режиме по сигналу

    QNetworkAccessManager::authenticationRequired,

    при этом логин и пароль будут кешированы, так что сигнал не будет испускаться при каждом запросе.

    connect(&m_manager,&QNetworkAccessManager::authenticationRequired,
            [this](QNetworkReply *rep, QAuthenticator* auth){
                auth->setUser("username");
                auth->setPassword("passwordd");
            });
    

    QNetworkReply::ContentReSendError

    Провести какую-либо точную аналогию с кодами HTTP для этой ошибки является затруднительным, поскольку вызываться она может различными причинами.

    QNetworkReply::ContentConflictError

    Данная ошибка соответствует ошибке

    409 Confilct

    в протоколе HTTP.

    QNetworkReply::ContentGoneError

    Данная ошибка соответствует ошибке

    410 Gone (Удалён)

    в протоколе HTTP.

    QNetworkReply::InternalServerError

    Данная ошибка соответствует ошибке

    500 Internal Server Error (Внутренняя ошибка сервера)

    в протоколе http.

    QNetworkReply::OperationNotImplementedError

    Данная ошибка соответствует ошибке

    501 Not Implemented (Не реализовано)

    в протоколе http. Возникает такая тогда, когда Вы пытаетесь выполнить, например, запрос POST к URL, по которому сервер обрабатывает только GET запросы.

    Такое поведение можно встретить, например, в

    Django

    проекте. Если запрос не реализован, то сервер с Django отправит пустую страницу на POST запрос с данным кодом.

    QNetworkReply::ProtocolUnknownError

    Такая ошибка, как

    QNetworkReply::ProtocolUnknownError,

    может возникнуть из-за того, что в запрос был передан url без указания типа протокола, то есть вместо


    http://www.example.com

    было передано


    //www.example.com

    Такая проблема может возникнуть в том случае, если вы парсите страницы и извлекаете url изображений. Например, на данном сайте адреса всех изображений в статьях выглядят следующим образом


    /media/uploads/2017/02/03/testquickwidget.jpg

    То есть не указывается протокол и домен сайта. Поэтому если Вы извлечёте все адреса изображений со страницы, то не сможете скачать изображения без дополнительной обработки, а именно без подстановки домена и протокола в начале строки, получив данную ошибку.

    QNetworkReply::ServiceUnavailableError

    Соответствует ошибке

    503 Service Unavailable («сервис недоступен»)

    в протоколе http

    QNetworkReply::ProtocolInvalidOperationError

    В данном случае протокол определён, но точное соответствие ошибке из протокола http не прослеживается, относительно других протоколов также может быть что угодно.

    QNetworkReply::UnknownNetworkError

    Наиболее частый вариант того, чему может соответствовать данная ошибка является ошибка шлюза

    502 Bad Gateway («плохой, ошибочный шлюз»)

    в протоколу http

    QNetworkReply::UnknownProxyError

    Также может быть ошибка 502, но уже в варианте с прокси-сервером

    Ошибки QNetworkReply::UnknownContentError,QNetworkReply::ProtocolFailure, QNetworkReply::UnknownServerError

    С данными ошибками затрудняюсь найти рабочее соответствие, буду рад подсказке, если кто сталкивался.

    Пример с выводом ошибки в qDebug

    Можно проверять ошибку по сигналу завершения запроса от

    QNetworkAccessManager

    в слоте, который подключается для обработки результата запроса.

    manager = new QNetworkAccessManager(this);
    connect(manager, &QNetworkAccessManager::finished, this, &Downloader::onResult);
    

    В данном случае имеется класс-обёртка над классом

    QNetworkAccessManager

    с названием

    Downloader

    . У этого класса имеется слот

    onResult

    , который в свою очередь отвечает за обработку результата ответа

    QNetworkAccessManager

    .

    void Downloader::onResult(QNetworkReply *reply)
    {
        // Если в процессе получения данных произошла ошибка
        if(reply->error()){
            // Сообщаем об этом и показываем информацию об ошибках
            qDebug() << "ERROR";
            // Здесь получаем один из enum NetworkError, то есть код ошибки
            qDebug() << reply->error();
        } else {
            // ToDo something
        }
    }
    

    I have a secured URL working with an x509 certificate and I am supposed to receive a JSON as an answer. My certificate is in pfx format (ca certificate, local certificate, key). I added it on the computer and when launching a request on google chrome and internet explorer with the secured URL I have indeed the JSON as an answer.

    My problem is when I try to do the same inside my Qt application I do not have any answer from the same URL. My code :

        QSslConfiguration config = QSslConfiguration::defaultConfiguration();
        config.setProtocol(QSsl::TlsV1_2);
    
        _manager = std::make_unique<QNetworkAccessManager>();
        auto line = "myurl";
        qInfo() << line;
    
        QNetworkRequest request((QUrl::fromUserInput(line)));
        request.setSslConfiguration(config);
    
        QEventLoop loop;
        connect(_manager.get(), &QNetworkAccessManager::finished, &loop, 
        &QEventLoop::quit, 
        Qt::DirectConnection);
    
        connect(_manager.get(), &QNetworkAccessManager::sslErrors, this, 
        &CheckConfController::sslErrors);
    
        _loginReply = std::unique_ptr<QNetworkReply>(_manager->get(request));
    
        connect(_loginReply.get(), &QNetworkReply::readyRead,
                this, &CheckConfController::replyFinished);
        connect(_loginReply.get(), &QNetworkReply::finished,
                this, &CheckConfController::_loginReceive);
        loop.exec();
    

    The login receive method :

    void CheckConfController::_loginReceive(){
        qInfo() << "status code : " << _loginReply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
        qInfo() << "error : " << _loginReply->error();
        qInfo() << "error string : " << _loginReply->errorString();
        QByteArray b = _loginReply->readAll();
        qInfo() << "byte : " << b;
    }
    

    The SSL error method :

    void CheckConfController::sslErrors(QNetworkReply* reply, const QList<QSslError> &errors)
    {
        QByteArray b = reply->readAll();
        qInfo() << "reply : " << b;
    
        for(auto element : errors){
            qInfo() << "ssl error : " << element;
    
        }
    }
    

    This is mu Outpput :

    status code: QVariant(Invalid)
    error: QNetworkReply::RemoteHostClosedError
    err string: "Connection Closed"
    byte : ""
    

    SSL error is never called.

    I switched my URL line to https://www.google.com and it works fine. I also tried with other urls and i receive my json correctly.

    This is my configuration:

    Qt version: 5.12.11
    compiler: MSVC 2017 64 bits
    Computer running the application: Windows 7
    

    Any help would be appreciated. Thank you.

    I have a secured URL working with an x509 certificate and I am supposed to receive a JSON as an answer. My certificate is in pfx format (ca certificate, local certificate, key). I added it on the computer and when launching a request on google chrome and internet explorer with the secured URL I have indeed the JSON as an answer.

    My problem is when I try to do the same inside my Qt application I do not have any answer from the same URL. My code :

        QSslConfiguration config = QSslConfiguration::defaultConfiguration();
        config.setProtocol(QSsl::TlsV1_2);
    
        _manager = std::make_unique<QNetworkAccessManager>();
        auto line = "myurl";
        qInfo() << line;
    
        QNetworkRequest request((QUrl::fromUserInput(line)));
        request.setSslConfiguration(config);
    
        QEventLoop loop;
        connect(_manager.get(), &QNetworkAccessManager::finished, &loop, 
        &QEventLoop::quit, 
        Qt::DirectConnection);
    
        connect(_manager.get(), &QNetworkAccessManager::sslErrors, this, 
        &CheckConfController::sslErrors);
    
        _loginReply = std::unique_ptr<QNetworkReply>(_manager->get(request));
    
        connect(_loginReply.get(), &QNetworkReply::readyRead,
                this, &CheckConfController::replyFinished);
        connect(_loginReply.get(), &QNetworkReply::finished,
                this, &CheckConfController::_loginReceive);
        loop.exec();
    

    The login receive method :

    void CheckConfController::_loginReceive(){
        qInfo() << "status code : " << _loginReply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
        qInfo() << "error : " << _loginReply->error();
        qInfo() << "error string : " << _loginReply->errorString();
        QByteArray b = _loginReply->readAll();
        qInfo() << "byte : " << b;
    }
    

    The SSL error method :

    void CheckConfController::sslErrors(QNetworkReply* reply, const QList<QSslError> &errors)
    {
        QByteArray b = reply->readAll();
        qInfo() << "reply : " << b;
    
        for(auto element : errors){
            qInfo() << "ssl error : " << element;
    
        }
    }
    

    This is mu Outpput :

    status code: QVariant(Invalid)
    error: QNetworkReply::RemoteHostClosedError
    err string: "Connection Closed"
    byte : ""
    

    SSL error is never called.

    I switched my URL line to https://www.google.com and it works fine. I also tried with other urls and i receive my json correctly.

    This is my configuration:

    Qt version: 5.12.11
    compiler: MSVC 2017 64 bits
    Computer running the application: Windows 7
    

    Any help would be appreciated. Thank you.

    Что значит удаленный хост принудительно разорвал существующее подключение в майнкрафте

    Ошибка «Удаленный хост принудительно разорвал существующее подключение» возникает при попытке установить соединение с сервером.

    Возможно, сервер при отправке ответного запроса на подтверждение подключения, не может получить обратного отклика от клиента в отведенном промежутке времени и разрывает соединение. Есть несколько решений для устранения этой ошибки, узнаем их подробнее.

    Итак, что в таких случаях делать?

    Повторюсь, описанные меры являются определённым танцем с бубном. Сейчас очень плотно общаюсь с технической поддержкой своего брокера и надеюсь, это принесёт свои плоды. Для реализации данного решения требуется, чтобы все акции были разнесены по разным закладкам, то есть графики Сбербанка, Газпрома, Алросы, Роснефти, фьючерсы, опционы и другие инструменты должны находиться на отдельных закладках.

    Шаг 0. Настройка соединения

    Отключаем автоматическое восстановление соединения. Иначе обрывы и зависания нам не дадут покоя.

    Меню Система -> Соединения

    Шаг 1. Настройка потока котировок

    Обратите внимание на количество используемых инструментов и установите получение котировок только по открытым пользователем таблицам. Это существенно снизит поток получаемой информации с серверов брокера.

    Из документации Quik`a:

    Исходя из настроек открытых пользователем таблиц» – получать новые значения только по тем инструментам и их параметрам, которые отображаются в открытых пользователем таблицах программы. Если признак включен, то с сервера принимаются параметры по всем инструментам, отображаемым в следующих окнах и таблицах

    Меню «Система->Заказ данных->Поток котировок»

    Давим кнопку «Установить настройки по открытым таблицам»

    . и получаем котировки только по нужным нам инструментам. Давим «Да»

    Шаг 1.1 Сохранение изменений

    Сохраняем конфигурацию Quik`a в используемый файл.wnd.

    Шаг 2. Очистка служебных файлов

    Закрываем терминал Quik и удаляем файлы с расширением.dat в корне папки Quik. У меня там хранился 21 файл, у кого-то это число может быть как больше, так и меньше.

    Список файлов с расширением.dat папки Quik

    Шаг 2.1 Добавление строки -clear

    Для очистки служебных файлов с расширениями.log и.dat при каждом запуске терминала добавляем к ярлыку Quik`a строку -clear.

    Заходим в свойства ярлыка Quik Параметр позволяет очистить служебные файлы. Давим на «Ок»

    Наличие параметра -clear несколько ускоряет загрузку терминала Quik. Однако, после обновления программы параметр -clear придётся заново добавлять к ярлыку файла info.exe. Также это не спасёт после автоматического перезапуска программы.

    Заходим в меню «Основные настройки»

    Установка признака «На локальной машине.» Давим на ОК.

    Шаг 2.2 Запуск после внесённых изменений

    Запускаем терминал Quik`a, загружаем используемую конфигурацию и пробуем подключиться. Если не помогло, то следуем инструкции далее.

    Шаг 3. А если не помогло, то ищем «толстого»

    Теперь сохраняем закладку самого «жирного» инструмента в отдельный файл:

    Шаг 4. Удаление закладок

    Удаляем ранее сохранённую закладку с самым «жирным» инструментом. В моём случае это закладка с графиками акций «Сбербанка.»

    Удаление закладки с «жирным» инструментом

    Шаг 5. Подключение

    Подключаемся к серверу брокера и авторизуемся. Если картина не изменилась удаляем закладку с менее «жирным» инструментом и так до тех пор, пока соединение не будет установлено стабильно.

    Шаг 6. Сохранение конфигурации со стабильным соединением

    После того, как соединение установлено и не разрывается, сохраняем полученный файл конфигураций под другим именем. Например, your_bunny_wrote.wnd.

    После установки стабильного подключения к серверу брокера производим обратные действия. Загружаем сохранённые закладки:

    Выбираем закладку и давим «Открыть»

    Начинаем в обратном порядке — с наименее «жирного» и двигаемся к наиболее «толстому» инструменту. На секунду терминал подвисает, но после этого разрисовывает нужные нам графики. Вуаля!

    Повторяем шаг 7 до тех пор, пока не загрузим удалённые закладки всех необходимых инструментов. Благо у меня он один и обрыв соединения происходит только при сохранении в основной файл.wnd закладки с графиками Сбербанка. Хотя их там всего 5 штук.

    Перед каждым закрытием терминала Quik сохраняем закладку в отдельный файл, повторяя шаг 3 для каждого «жирного» инструмента.

    Мы не знаем, на каком моменте у Quik`а возникнет желание оборвать соединение. Это возможно после очередного сохранения и загрузки файла. Поэтому рекомендую иметь два таких файла, например Сбербанк и Сбербанк_new, сохраняя изменения по очереди то в один, то в другой файл. Таким методом мы уменьшим вероятность потери данных занесённых на основной график инструмента.

    Данная ошибка с кодом 10054, критического характера, проявляется у пользователей в момент проведения записи. Чаще всего встречается у старых релизов 1С 8.2.

    Скриншот ошибки 10054:

    Вообще, появление этой ошибки, говорит о том, что происходит неожиданное для разработчика сервера 1С действие:

    • приходит некорректный запрос;
    • некоректные данные;
    • запрос вызывающий большую выборку, с которой он не может встретится;
    • частный случай: номер документа был больше, чем длина заданная в нумераторе;
    • проверьте работу при отключенных антивирусах или firewall-е

    Отключить антивирус.

    Некоторое антивирусное программное обеспечение может блокировать некоторые функции Minecraft, поэтому вы можете столкнуться с проблемой неработающей локальной сети. Если на вашем компьютере установлено антивирусное программное обеспечение, вы можете временно отключить его и проверить, решена ли проблема.

    ВАЖНЫЙ : Будьте особенно осторожны с тем, какие сайты вы посещаете, какие электронные письма открываете и какие файлы загружаете, когда ваш антивирус отключен.

    Исправление 2 — повторно войдите в свою учетную запись Minecraft

    Вы также можете выйти из своей учетной записи Minecraft учетную запись, а затем снова войдите в нее , чтобы обновить аутентификацию профиля и подключение. Если и этот метод не помогает, попробуйте следующий.

    Очистка DNS и обновление IP — это обычное, но эффективное решение различных проблем с отключением от Интернета. Поэтому, если Minecraft не может подключиться к серверу, попробуйте исправить вашу проблему.

    Майнкрафт правильно подключается к серверу? Если нет, переходите к Исправлению 4 ниже.

    Удаленный хост принудительно разорвал существующее подключение в Майнкрафт

    Ошибка «Удаленный хост принудительно разорвал существующее подключение в Майнкрафт» чаще всего возникает при возникновении проблем с интернетом и решить ее можно несколькими способами.

    Тут перечислены все возможные причины появления данной ошибки и методы ее исправления от самого простого и распространенного до самых сложных. Начните с самого верха списка и опускайтесь вниз тестируя все возможные причины.

    Диспетчер задач

    1. Перезагрузите роутер и проверьте соединение с интернетом;
    2. Попробуйте перезагрузить компьютер;
    3. Проверьте и в случае необходимости обновите Java;
    4. Проверьте и обновите все драйвера;
    5. Попробуйте подключиться к другой точке wi-fi или же сменить провайдера (например раздать интернет с телефона);

    Win + R и в появившемся окне введите Firewall.cpl Включение и отключение брандмауэра Windows Отключите Брандмауэр

    10. Попробуйте открыть порты. Для этого нажмите Win + R и в появившемся окне введите Firewall.cpl

    Нажмите Выберите для порта и нажмите далее Измените порт на один из рекомендованных (80, 443, 5000-5010)

    Выберите для порта и нажмите далее Измените порт на один из рекомендованных (80, 443, 5000-5010)

    java io ioexception в Майнкрафт — как исправить ошибку

    Что это за ошибка: внутреннее исключение: java.io.ioexception — проще говоря, это ошибка интернет-соединения. Ваш компьютер пытается установить соединение с выбранным вами сервером Minecraft, и это соединение прерывается во время перемещения между сервером и вашим компьютером.

    Давайте начнем решать эту проблему с некоторых основных решений, которые работают практически при любой ошибке.

    Не пропускайте их, если вы еще не пробовали их, потому что это самые простые решения, которые занимают минимум времени!

    Это основные шаги, которые позволят нам выяснить, является ли ваша проблема временной или возникла из-за более серьезной проблемы, которая потребует дополнительного устранения неполадок. Если это не помогло, пора попробовать более сложные шаги.

    Решение ошибки в Майнкрафте, если нет подключения к Интернету

    Для начала нужно убедиться в наличии подключения устройства к Интернету. Для этого откройте рандомную веб-страницу в своем браузере. Например, кликните по закладкам или вбейте запрос в поисковик.

    Можно также сделать следующее:

    Кликнув левой кнопкой мыши по ряду белых столбцов, вы также увидите сведения о текущем состоянии соединения и активности сети. Если символ подключения горит в новом окне не зеленым, а желтым, красным или серым, то проблема может заключаться именно в этом. Попробуйте перезагрузить сеть, кликнув по соединению. Нажмите сперва кнопку « Отключение ».

    Кнопка Отключить сеть

    Она появится, как только вы щелкните по названию источника сигнала. Затем нажмите на клавишу « Подключение », которая появится на том же месте. Если это не помогает, перезагрузите заодно компьютер и вспомните, не забыли ли вы заплатить за Интернет.

    Чтобы получить точную информацию о техническом наличии доступа, позвоните непосредственно провайдеру. Спросите, заблокирован ли Майнкрафт на территории вашего проживания. Если нет, то следует осведомиться, связаны ли ограничения доступа с оборудованием провайдера.

    Звонок

    Попробуйте войти в свой аккаунт с другого устройства, чтобы проверить, появляется ли ошибка «Не удалось подключиться к серверу Майнкрафт». Когда такой возможности нет, следует попросить о помощи друга. Если у него другой провайдер, то желательно заодно проверить и версию с блокировкой.

    Решение 2. Очистите кеш DNS вашей системы

    Ошибка Java.io может возникнуть, если кеш DNS вашей системы поврежден, так как это может привести к тому, что система не сможет разрешить доменное имя. В этом контексте очистка кеша DNS (что заставит систему повторно получать комбинации) может решить проблему.

    1. Щелкните Windows, введите: Командная строка и щелкните правой кнопкой мыши результат командной строки. Затем выберите Запуск от имени администратора.Откройте командную строку от имени администратора
    2. Теперь выполните одно за другим следующее: ipconfig / flushdns ipconfig / release ipconfig / RenewОчистить кеш DNS
    3. Затем выйдите из командной строки и проверьте, решена ли проблема исключения Java.

    Если проблема не исчезнет, ​​проверьте, решает ли изменение DNS-сервера (например, Google DNS) проблему внутреннего исключения.

    Возможные проблемы и их решения

    Ошибка входа: Недействительная сессия в TLauncher

    При подключении к серверу появляется: «Недопустимая сессия» или «Проверьте имя пользователя».

    Решение: Необходимо запускать версию с иконкой TL (иначе нужна лицензия игры), если такую и запускаете, проверьте, стоит ли галочка (в лаунчере) в «Управление аккаунтами» -> «Использовать скины TLauncher».

    При подключении к серверу появляется: «Io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection time out: no further information»

    Ошибка: Connection time out: no further information

    Решение: игра не смогла найти информации о таком сервере, значит настройка сети выполнена не верно. Попробуйте на хост компьютере отключить антивирус и брандмауэр или настроить правильно.

    Нужно проверить, что ваш компьютер может пинговать нужный вам IP (сервер). Для этого, нажимаем «Пуск» и в поиск пишем «CMD», открываем эту программу (Если поиска у вас нет в пуске, нажимаем кнопки Windows+R и там пишем CMD).

    Пишем в чёрном окне: ping -4 10.10.10.10 , где вместо 10.10.10.10 нужно указывать IP или адрес сервера нужный вам (к какому пытаетесь подключится).

    Тест ping в CMD

    Превышен интервал ожидания для запроса: Если у вас такой ответ, значит сервер Не пингуется, настройки сети выполнены не верно.

    Ответ от 190.100.1.1: число байт=32 время=275мс TTL=242: Значит сеть настроена верно, у вас должна быть возможность войти на сервер.

    При подключении к серверу идет прогрузка чанков и сразу выкидывает с сервера (разрыв соединения).

    Решение: настройка сети выполнена верно, но антивирус или брандмауэр разрывает соединение. Отключите их или настройте правильно.

    При подключении к серверу появляется: 1.14.2: Bad packet ID 26; 1.13.2: Bad packet ID 27; 1.7.10: Застряло на Logging in. или «received string length longer than maximum allowed»

    Я изучал API Github и хотел создать выпуск на github с помощью Qt.

    Но когда я отправляю свою проблему, «Консоль отладки» говорит

    QNetworkReply::RemoteHostClosedError
    

    (Я поймал ошибку).

    Я не знаю, почему, пожалуйста, помогите мне!

    Код на Github:

    void MainWindow::on_pushButton_2_clicked()
    {
        QString id = ui->ID_Send->text();
        QJsonObject JJ;
        QJsonDocument jd;
        JJ["title"] = ui->Title->text();
        JJ["body"] = ui->Comment->toPlainText();
        QHttpMultiPart *part = new QHttpMultiPart(QHttpMultiPart::FormDataType);
        QHttpPart info;
        info.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/json"));
        jd.setObject(JJ);
        info.setBody(jd.toJson());
        part->append(info);
    
        QNetworkRequest request;
        qDebug()<<"https://api.github.com/repos/MoyuSteve/Comment/issues?client_id="+
                  client_id+"&client_secret="+client_secret;
        request.setUrl(QUrl("https://api.github.com/repos/MoyuSteve/Comment/issues?client_id="+
                            client_id+"&client_secret="+client_secret));
        QNetworkReply* reply = manager->post(request,part);
        QObject::connect(reply, &QNetworkReply::finished, [reply, this] () {
            if (reply->error() == QNetworkReply::NoError) {
                ui->status->setText("ok");
            } else {
                ui->status->setText("failed");
                qDebug()<<reply->error();
            }
            reply->deleteLater();
        });
    }
    

    1 ответ

    Вы можете взять пример в этом ответе или здесь.

    По сравнению с вашим кодом он устанавливает заголовок "application/json".
    И он использует QNetworkAccessManager для отправки сетевых запросов и получения ответов.

    QUrl url("https://api.github.com/repos/" + owner +"/" + project + "/tags");
    qInfo() << url.toString();
    QNetworkRequest request(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    QNetworkAccessManager nam;
    QNetworkReply * reply = nam.get(request);
    


    0

    VonC
    10 Апр 2020 в 08:11

    Автор Тема: не понимаю почему выдает ошибку.  (Прочитано 3622 раз)
    Firefox

    Гость


    добрый день. с программированием сети столкнулась впервые. решила начать с простого написать сервер и клиент как в книге Шлее.

    // Сервер
    #include «myserver.h»

    MyServer::MyServer(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
    {
    ui.setupUi(this);
    h_addr=new QHostAddress(«192.168.13.9»);
    m_ptcpServer=new QTcpServer(this);
    if(m_ptcpServer->listen(*h_addr, 2323));
    {
    QMessageBox::critical(0,»Server Error»,»Unable to start the server:»+m_ptcpServer->serverError());
    m_ptcpServer->close();
    close();
    }
    connect(m_ptcpServer,SIGNAL(newConnection()),SLOT(slotNewConnection()));
    }

    MyServer::~MyServer()
    {

    }
    void MyServer::slotNewConnection()
    {
    QTcpSocket * pClientSocket=m_ptcpServer->nextPendingConnection();
    connect(pClientSocket,SIGNAL(disconnected()),SLOT(deleteLater()));
    connect(pClientSocket,SIGNAL(readyRead()),SLOT(slotReadClient()));

    sendToClient(pClientSocket,»Server Response: Connected!»);
    }

    void MyServer::slotReadClient()
    {
    QTcpSocket* pClientSocket=(QTcpSocket*)sender();
    QDataStream in(pClientSocket);
    in.setVersion(QDataStream::Qt_4_3);
    for(;;)
    {
    if(!m_bNextBlockSize)
    {
    if(pClientSocket->bytesAvailable()< sizeof(qint16)) break;
    in>> m_bNextBlockSize;
    }
    if(pClientSocket->bytesAvailable()< m_bNextBlockSize) break;

    QTime time;
    QString str;
    in>>time>>str;
    QString strMessage;
    strMessage=time.toString()+» «+»Client has send — «+str;
    ui.textEdit->setText(strMessage);
    m_bNextBlockSize=0;
    }
    }
    void MyServer::sendToClient(QTcpSocket* pSock, const QString& str)
    {
    QByteArray arrBlock;
    QDataStream out(&arrBlock,QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_3);
    out<< qint16(0)<<QTime::currentTime()<<str;

    out.device()->seek(0);
    out<<qint16(arrBlock.size()-sizeof(qint16));

    pSock->write(arrBlock);
    }

    ошибка возникает при подключении сразу if(m_ptcpServer->listen(*h_addr, 2323));
    почему может не подключаться не понимаю, объясните кто-нибудь. айпи адрес и номер порта совпадают.

    //Клиент
    #include «myclient.h»

    myClient::myClient(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
    {
    ui.setupUi(this);
    m_pTcpSocket=new QTcpSocket(this);
    m_pTcpSocket->connectToHost(«192.168.13.12»,2323);

    connect(m_pTcpSocket,SIGNAL(connected()),SLOT(slotConnected()));
    connect(m_pTcpSocket,SIGNAL(readyRead()),SLOT(slotConnected()));
    connect(m_pTcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(slotError(QAbstractSocket::SocketError)));

    connect(ui.textEdit,SIGNAL(returnPressed()),this,SLOT(slotSendToServer()));
    }

    myClient::~myClient()
    {

    }

    void myClient::on_pushButton_clicked()
    {
    slotSendToServer();
    }
    void myClient::slotReadyRead()
    {
    QDataStream in(m_pTcpSocket);
    in.setVersion(QDataStream::Qt_4_3);
    for(;;)
    {
    if(!m_nNextBlockSize)
    {
    if(m_pTcpSocket->bytesAvailable()< sizeof(qint16)) break;
    in>> m_nNextBlockSize;
    }
    if(m_pTcpSocket->bytesAvailable()< m_nNextBlockSize) break;
    QTime time;
    QString str;
    in>>time>>str;
    QString strMessage;
    strMessage=time.toString()+» «/*+»Server has send — «*/+str;
    ui.textEdit->setText(strMessage);
    m_nNextBlockSize=0;
    }
    }
    void myClient::slotError(QAbstractSocket::SocketError err)
    {
    QString strError=
    «Error:»+(err==QAbstractSocket::HostNotFoundError?
    «The host was not found.» :
    err==QAbstractSocket::RemoteHostClosedError ?
    «The remote host is closed.» :
    err==QAbstractSocket::ConnectionRefusedError ?
    «The connection was refused.» :
    QString(m_pTcpSocket->errorString())
    );
    ui.textEdit->setText(strError);
    }
    void myClient::slotConnected()
    {
    ui.textEdit->setText(«Received the connected() signal»);
    }
    void myClient::slotSendToServer()
    {
    QByteArray arrBlock;
    QDataStream out(&arrBlock,QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_3);
    out<< qint16(0)<<QTime::currentTime()<<ui.lineEdit->text();
    out.device()->seek(0);
    out<<qint16(arrBlock.size()-sizeof(qint16));

    m_pTcpSocket->write(arrBlock);
    ui.lineEdit->setText(«»);

    }


    Записан
    blood_shadow

    Гость


    C++ (Qt)

    if(m_ptcpServer->listen(*h_addr, 2323));
    {
       QMessageBox::critical(0,"Server Error","Unable to start the server:"+m_ptcpServer->serverError());
       m_ptcpServer->close();
       close();
    }

    открываем ассистант и читаем:
    «bool QTcpServer::listen ( const QHostAddress & address = QHostAddress::Any, quint16 port = 0 )
    Tells the server to listen for incoming connections on address address and port port. If port is 0, a port is chosen automatically. If address is QHostAddress::Any, the server will listen on all network interfaces.
    Returns true on success; otherwise returns false.«

    теперь смотрим на самую верхнюю строку в которой ошибка и… надеюсь
    все стало понятно?


    Записан
    Firefox

    Гость


    мне не надо со всеми связываться я хочу с определенным айпи


    Записан
    blood_shadow

    Гость


    мне не надо со всеми связываться я хочу с определенным айпи

    причем тут со всеми?
    if(m_ptcpServer->listen(*h_addr, 2323)); строка вернет true при успешном подключении,
    я так понимаю то опечатка с «;» вконце если да то код:

    C++ (Qt)

    if(m_ptcpServer->listen(*h_addr, 2323))
    {
       QMessageBox::critical(0,"Server Error","Unable to start the server:"+m_ptcpServer->serverError());
       m_ptcpServer->close();
       close();
    }
     

    выбъет ошибку при успешном подключении, всего то… ибо нет смысла в одном операторе
    if(m_ptcpServer->listen(*h_addr, 2323));


    Записан
    Disaron

    Гость


    Не только опечатка, там еще надо бы инверсию вкрутить:

    C++ (Qt)

    if(!m_ptcpServer->listen(*h_addr, 2323))
    {
       QMessageBox::critical(0,"Server Error","Unable to start the server:"+m_ptcpServer->serverError());
       m_ptcpServer->close();
       close();
    }

    Записан
    blood_shadow

    Гость


    Не только опечатка, там еще надо бы инверсию вкрутить:

    зачем же так сразу  Улыбающийся, в моих 2 ответах все это указано надо только внимательно
    прочесть и мозгами пошевелить, человека надо наталкивать на правильный путь, а не
    давать готовое решение  Подмигивающий


    Записан
    Firefox

    Гость


    про инверсию не досмотрела совсем)))а про ; это опечатка я убрала сразу потом.


    Записан

    Hi, this is my first question on this forum :)
    I am writing a multiplayer chess game. I am writing the server side in c++ and the client side in Python (PySide2). The OS I have is windows 10.
    On the client side I have a QUdpSocket and a QWebSocket. I use the udpsocket in order to find the server automatically, rather than hardcoding its url. I write a datagram to the server which contains the client’s username.
    On the server side I receive the datagram and parse the username from it. Here I have two classes. Player and Game. HichessServer is the class that runs the server. Inside processPendingDatagrams it parses the username and sends the server url inside a datagram to the client. The client receives it and connects to the server. On new connection I pick a username from username queue and create a new player. If possible I start a game from two players.
    I am sharing the code via pastebin, so that it doesn’t take up much space.
    This is the server source file: https://pastebin.com/gPLWF9q8,
    this is the server header file: https://pastebin.com/tdQ8VFxr.
    This is the client: https://pastebin.com/R9uLNqjL

    Now about the problem I am facing.
    When the first client connects to the server, everything is ok. But when I try to connect with the second client, I get RemoteHostClosedError right before onNewConnection slot is called and the first client disconnects. removeClient doesn’t remove the first client properly in this case, probably because of the error. Here are the logs of the server side when I connect the server with these two clients: https://pastebin.com/TjXRbZgi.
    I get these logs from the first client: https://pastebin.com/vLfwQTWK.
    The only log I get from the second client is the following:
    DEBUG:root:Address: <PySide2.QtNetwork.QHostAddress(«192.168.56.255») at 0x0000026D55F5DB48>
    Which is also strange, because it must be similar to the first client’s logs.

    I have already tried disabling the firewall. Nothing changed. I haven’t found any bug reports or threads regarding this problem. Qt docs apparently don’t talk about such a problem either. I suppose that during the process of Client2’s connection to the server, the server «kicks» Client1 right before onNewConnection() slot is called.

    I apologize for such a long post. I tried my best to explain the problem clearly.
    Thanks to everyone for the help in advance 🤗

    I am writing a program to scrap articles of Geeks for Geeks using BeautifulSoup and pdfkit( for downloading in form of pdfs ) in Python.

    While running the script I get OSError : RemoteHostClosedError.

    I tried to solve it by recursion :

    def PDFdownload( url , filename ):
                        try:
                            pdfkit.from_url(url,filename)
                        except OSError:
                            print('Waiting ...ResolvingRemoveHostClosedError')
                            time.sleep(2)
                            PDFdownload( url , filename)
    

    Sometimes it works but sometimes it takes very long. Is there a better way to solve this?

    PS — I am a newbie and I don’t know anything about Socket Programming.

    I was learning the Github API and wanted to create an Issue on github by Qt.

    But, when I submit my Issue, the «Debug Console» said

    QNetworkReply::RemoteHostClosedError
    

    (I catched error).

    I don’t know why, please help me!

    Code on Github:

    void MainWindow::on_pushButton_2_clicked()
    {
        QString id = ui->ID_Send->text();
        QJsonObject JJ;
        QJsonDocument jd;
        JJ["title"] = ui->Title->text();
        JJ["body"] = ui->Comment->toPlainText();
        QHttpMultiPart *part = new QHttpMultiPart(QHttpMultiPart::FormDataType);
        QHttpPart info;
        info.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/json"));
        jd.setObject(JJ);
        info.setBody(jd.toJson());
        part->append(info);
    
        QNetworkRequest request;
        qDebug()<<"https://api.github.com/repos/MoyuSteve/Comment/issues?client_id="+
                  client_id+"&client_secret="+client_secret;
        request.setUrl(QUrl("https://api.github.com/repos/MoyuSteve/Comment/issues?client_id="+
                            client_id+"&client_secret="+client_secret));
        QNetworkReply* reply = manager->post(request,part);
        QObject::connect(reply, &QNetworkReply::finished, [reply, this] () {
            if (reply->error() == QNetworkReply::NoError) {
                ui->status->setText("ok");
            } else {
                ui->status->setText("failed");
                qDebug()<<reply->error();
            }
            reply->deleteLater();
        });
    }
    

    1. 1. QNetworkReply::ConnectionRefusedError и QNetworkReply::RemoteHostClosedError
    2. 2. QNetworkReply::HostNotFoundError
    3. 3. QNetworkReply::TimeoutError
    4. 4. QNetworkReply::OperationCanceledError
    5. 5. QNetworkReply::SslHandshakeFailedError
    6. 6. QNetworkReply::TemporaryNetworkFailureError и QNetworkReply::NetworkSessionFailedError
    7. 7. QNetworkReply::BackgroundRequestNotAllowedError
    8. 8. QNetworkReply::TooManyRedirectsError и QNetworkReply::InsecureRedirectError
    9. 9. Ошибки QNetworkReply::Proxy*
    10. 10. QNetworkReply::ContentAccessDenied
    11. 11. QNetworkReply::AuthenticationRequiredError
    12. 12. QNetworkReply::ContentReSendError
    13. 13. QNetworkReply::ContentConflictError
    14. 14. QNetworkReply::ContentGoneError
    15. 15. QNetworkReply::InternalServerError
    16. 16. QNetworkReply::OperationNotImplementedError
    17. 17. QNetworkReply::ProtocolUnknownError
    18. 18. QNetworkReply::ServiceUnavailableError
    19. 19. QNetworkReply::ProtocolInvalidOperationError
    20. 20. QNetworkReply::UnknownNetworkError
    21. 21. QNetworkReply::UnknownProxyError
    22. 22. Ошибки QNetworkReply::UnknownContentError,QNetworkReply::ProtocolFailure, QNetworkReply::UnknownServerError
    23. 23. Пример с выводом ошибки в qDebug

    В одном из уроков была представлена работа с

    QNetworkAccessManager

    для получения содержимого страницы с сайта по протоколу

    http.

    Там была сделана проверка на наличие ошибок, но не были даны пояснения, какие могут быть ошибки. Для этого класс

    QNetworkReply

    предоставляет

    enum NetworkError

    , в котором перечислены коды возможных ошибок.

    В случае успешного выполнения возвращается

    NoError

    , равный

    0

    .

    В противном случае возвращается код ошибки из кодов, представленных ниже:


    Константа Значение Описание
    QNetworkReply::ConnectionRefusedError
    1
    Удалённый сервер отклонил соединение (сервер не принимает запросы)
    QNetworkReply::RemoteHostClosedError
    2
    удаленный сервер закрыл соединение преждевременно, до того, как весь ответ был получен и обработан
    QNetworkReply::HostNotFoundError
    3
    удаленный хост не был найден (недействительное имя хоста)
    QNetworkReply::TimeoutError
    4
    подключение к удаленному серверу истекло
    QNetworkReply::OperationCanceledError
    5
    операция была отменена через вызов abort() или close() до того, как была завершена.
    QNetworkReply::SslHandshakeFailedError
    6
    Подключение по SSL/TLS не удалось, шифрованный канал не может быть. Должен испускаться сигнал sslErrors().
    QNetworkReply::TemporaryNetworkFailureError
    7
    соединение было нарушено из-за отключения от сети, однако система инициировала роуминг к другой точке доступа. Запрос должен быть повторно и будет обработан, как только соединение будет восстановлено.
    QNetworkReply::NetworkSessionFailedError
    8
    соединение было нарушено из-за отключения от сети или невозможности запуска сети.
    QNetworkReply::BackgroundRequestNotAllowedError
    9
    запрос в настоящее время не допускается из-за политики платформы.
    QNetworkReply::TooManyRedirectsError
    10
    количество редиректов превысило допустимый лимит. Лимит по умолчанию установлен на 50 редиректов через QNetworkRequest::setMaxRedirectsAllowed().
    QNetworkReply::InsecureRedirectError
    11
    во время обработки редиректов, API доступа по сети обнаружило редирект с  шифрованного протокола (https) на не шифрованный (http)
    QNetworkReply::ProxyConnectionRefusedError
    101
    в подключении к прокси-серверу было отказано (прокси-сервер не принимает запросы)
    QNetworkReply::ProxyConnectionClosedError
    102
    прокси-сервер закрыл соединение преждевременно, до того, как весь ответ был получен и обработан
    QNetworkReply::ProxyNotFoundError
    103
    прокси-хост не был найден (недействительное имя прокси хоста)
    QNetworkReply::ProxyTimeoutError
    104
    подключение к прокси-серверу истекло или прокси-сервер не ответил вовремя на отправленный запрос
    QNetworkReply::ProxyAuthenticationRequiredError
    105
    прокси-сервер требует аутентификации для того, чтобы удовлетворить запрос, но не принял каких-либо предложенных учётных данных (если таковые имеются)
    QNetworkReply::ContentAccessDenied
    201
    в доступе к удаленному контенту было отказано (по аналогии с ошибкой HTTP 401)
    QNetworkReply::ContentOperationNotPermittedError
    202
    Запрошенная операция на удаленное содержимое не допускается
    QNetworkReply::ContentNotFoundError
    203
    удаленный контент не был найден на сервере (аналогично ошибке HTTP 404)
    QNetworkReply::AuthenticationRequiredError
    204
    удаленный сервер требует аутентификации, чтобы предоставить контент, но предоставленные учетные данные не были приняты (если таковые имеются)
    QNetworkReply::ContentReSendError
    205
    запрос необходимо отправить повторно, но это не удалось, например, потому что загрузка данных не может быть прочитана во второй раз.
    QNetworkReply::ContentConflictError
    206
    запрос не может быть завершен из-за конфликта с текущим состоянием ресурса.
    QNetworkReply::ContentGoneError
    207
    запрошенный ресурс больше не доступен на сервере.
    QNetworkReply::InternalServerError
    401
    Сервер столкнулся с непредвиденным условием, которое не позволяет ему выполнить запрос.
    QNetworkReply::OperationNotImplementedError
    402
    сервер не поддерживает функциональные возможности, необходимые для выполнения запроса.
    QNetworkReply::ServiceUnavailableError
    403
    сервер не может обработать запрос в данный момент.
    QNetworkReply::ProtocolUnknownError
    301
    Network Access API не может удовлетворить запрос, потому что протокол не известен
    QNetworkReply::ProtocolInvalidOperationError
    302
    запрошенная операция недопустима для этого протокола
    QNetworkReply::UnknownNetworkError
    99
    была обнаружена неизвестная ошибка сети
    QNetworkReply::UnknownProxyError
    199
    была обнаружена неизвестная ошибка прокси
    QNetworkReply::UnknownContentError
    299
    была обнаружена неизвестная ошибка, связанная с удаленным содержимым
    QNetworkReply::ProtocolFailure
    399
    был обнаружен сбой в протоколе (ошибка синтаксического анализа, недействительные или неожиданные ответы и т.д.)
    QNetworkReply::UnknownServerError
    499
    была обнаружена неизвестная ошибка, связанная с ответом сервера

    После изучения данного списка ошибок можно сделать вывод, что данный список объединяет в себе значительно больший список ошибок, чем, например, тот список кодов ошибок, который может вернуть http сервер. Давайте поговорим немного о возможных ошибках и из-за чего они могут возникнуть.

    QNetworkReply::ConnectionRefusedError и QNetworkReply::RemoteHostClosedError

    Если говорить об интерпретации данных ошибок, то наиболее ярким примером для меня является подключение по SSH к другому хосту. Смысл ошибок в том, что в первом случае сервер нас не пускает, а во втором случае соединение могло быть закрыто по истечению определённого периода времени.

    Также ошибка ConnectionRefusedError может возникать в случаях, когда на определённом порту ПК просто нет службы, которая могла бы обработать запрос.

    QNetworkReply::HostNotFoundError

    Пожалуй довольно понятная ошибка, которая обозначает, что вы просто ввели неверный ip адрес или домен, с которого пытаетесь получить данные. Также, такая ошибка может возникнуть в том случае, если домен перестал быть доступен в сети. Данная ошибка аналогична ошибке номер

    105 —

    ERR_NAME_NOT_RESOLVED (HTTP).

    QNetworkReply::TimeoutError

    Превышен интервал ожидания. Наиболее близкое сравнение — это использование протокола ICMP, проверка доступности узла в сети, когда производим его ping. То есть узел в сети вроде бы и есть, но он не отвечает.

    QNetworkReply::OperationCanceledError

    А вот ошибка, которая будет относится уже к действиям самой программы на Qt. В данном случае она будет возникать тогда, когда логика программы прерывает получение данных через

    QNetworkAccessManager.

    То есть данная ошибка не должна возникать в том случае, если операция получения данных была прервана извне. Поэтому, если Вы отлавливаете подобную ошибку, то ищите проблему внутри вашей собственной программы.

    QNetworkReply::SslHandshakeFailedError

    Для установления шифрованных каналов связи, которые используют SSL шифрование, требуется установка соединения через операции квитирования, то есть через подтверждение приёма/передачи информации. В данном случае осуществляется согласование параметров шифрования, передача сеансового ключа, а также необязательные операции аутентификации сервера клиентом и клиента сервером. Если что-то из перечисленного пойдёт не так, то будет выброшена данная ошибка.

    QNetworkReply::TemporaryNetworkFailureError и QNetworkReply::NetworkSessionFailedError

    Возникновение данных ошибок может быть вызвано любой неполадкой в сети вплоть до падения физического подключения к сети. Проверять подключения можно через класс

    QNetworkInterface.

    Класс

    QNetworkInterface

    имеет статический метод

    QList

    QNetworkInterface::allInterfaces()

    , который возвращает список всех интерфейсов на вашем ПК. При этом будут учитываться абсолютно все соединения, вплоть до соединений, которые были созданы для виртуальной машины, например, для

    Virtual Box.

    Тут к слову возникает очень интересный момент, когда ведётся разработка программного обеспечения, которое должно работать по сети, и при этом у разработчика имеется виртуальная машина на борту, особенно если она запущена, то необходимо учитывать этот момент, поскольку программа может пытаться получить данные через соединение с виртуальной машиной, то есть будет считать что сеть доступна, хотя разработчик будет тестировать User Case при отключённом соединении. Впрочем, даже выключенная виртуальная машина будет вызывать некоторые проблемы, поскольку соединение будет активно, хотя Link и не будет поднят.

    Поэтому, чтобы понять, что не так, при получении ошибок

    QNetworkReply::TemporaryNetworkFailureErro

    r и

    QNetworkReply::NetworkSessionFailedError

    придётся протестировать интерфейсы ПК на предмет активности:

    QNetworkInterface::IsUp

    и

    QNetworkInterface::IsRunning.

    QNetworkReply::BackgroundRequestNotAllowedError

    А вот эта ошибка зависит непосредственно от политик платформы, для которой разрабатывается приложение. Например, если под некоторым абстрактным Android устройством запрещён обмен информацией по сети в энергосберегающем режиме, то в данном режиме мы будем получать именно эту ошибку, при попытке обмена информацией.

    QNetworkReply::TooManyRedirectsError и QNetworkReply::InsecureRedirectError

    А вот эти ошибки из разряда новенького в Qt 5.6. Теперь можно отслеживать превышения количества редиректов со страниц сайтов, а также редиректы со страниц с шифрованием https на страницы без шифрования. Что может быть полезно для разработки программного обеспечения для анализа сайтов.

    Без дополнительных настроек данные ошибки как правило не возникают. Дело в том, что когда задаётся

    QNetworkRequest

    и в него не устанавливаются флаги конфигурации, то при попытке запроса страницы с сайта, с которой осуществляется редирект, не будет происходить перехода на новый url, а в

    QNetworkReply

    не будет никакого полезного контента. Поэтому потребуется установить в

    QNetworkRequest

    флаг

    QNetworkRequest::FollowRedirectsAttribute,

    тогда QNetworkAccessManager будет переходить по редиректам, пока не получит итоговую страницу или не превысит ограничение на количество переходов. По умолчанию количество переходов ограничено 50-ю.

    Установка атрибута может производиться следующим образом:

    QNetworkRequest request;  
    request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, QVariant(true));
    

    Что касается

    QNetworkReply::InsecureRedirectError,

    то смысл заключается в том, чтобы отследить редирект на небезопасный протокол.

    Ошибки QNetworkReply::Proxy*

    Следующие пять ошибок аналогичны по своему характеру ошибкам подключения к серверам без проксирования.

    QNetworkReply::ContentAccessDenied

    В документации сказано, что данная ошибка аналогична ошибке 401 в HTTP, то есть требуется авторизация, но полагаю, что данная ошибка может возникать и в случаях получения кода 403 и 407. Ошибка 407 аналогична ошибке 401, но используется для прокси-сервера. А ошибка 403 является порождающей для ошибок 401 и 407.

    QNetworkReply::AuthenticationRequiredError

    Данная ошибка характерна для HTTP протокола. Дело в том, что http протокол поддерживает схемы проверки подлинности. В данном случае необходимо посылать запрос на сервер с установкой логина и пароля. Замечу, что это напрямую означает то, что Вы можете написать приложение на Qt, которое будет аутентифицироваться на сайтах и выполнять определённые действия на сайте уже в авторизованном режиме, то есть можно написать и бота для работы на сайте.

    Решение проблемы заключается в том, чтобы установить логин и пароль пользователя в  QAuthenticator, который будет подмешивать учётные данные к запросу. Причем делаться это будет в автоматическом режиме по сигналу

    QNetworkAccessManager::authenticationRequired,

    при этом логин и пароль будут кешированы, так что сигнал не будет испускаться при каждом запросе.

    connect(&m_manager,&QNetworkAccessManager::authenticationRequired,
            [this](QNetworkReply *rep, QAuthenticator* auth){
                auth->setUser("username");
                auth->setPassword("passwordd");
            });
    

    QNetworkReply::ContentReSendError

    Провести какую-либо точную аналогию с кодами HTTP для этой ошибки является затруднительным, поскольку вызываться она может различными причинами.

    QNetworkReply::ContentConflictError

    Данная ошибка соответствует ошибке

    409 Confilct

    в протоколе HTTP.

    QNetworkReply::ContentGoneError

    Данная ошибка соответствует ошибке

    410 Gone (Удалён)

    в протоколе HTTP.

    QNetworkReply::InternalServerError

    Данная ошибка соответствует ошибке

    500 Internal Server Error (Внутренняя ошибка сервера)

    в протоколе http.

    QNetworkReply::OperationNotImplementedError

    Данная ошибка соответствует ошибке

    501 Not Implemented (Не реализовано)

    в протоколе http. Возникает такая тогда, когда Вы пытаетесь выполнить, например, запрос POST к URL, по которому сервер обрабатывает только GET запросы.

    Такое поведение можно встретить, например, в

    Django

    проекте. Если запрос не реализован, то сервер с Django отправит пустую страницу на POST запрос с данным кодом.

    QNetworkReply::ProtocolUnknownError

    Такая ошибка, как

    QNetworkReply::ProtocolUnknownError,

    может возникнуть из-за того, что в запрос был передан url без указания типа протокола, то есть вместо


    http://www.example.com

    было передано


    //www.example.com

    Такая проблема может возникнуть в том случае, если вы парсите страницы и извлекаете url изображений. Например, на данном сайте адреса всех изображений в статьях выглядят следующим образом


    /media/uploads/2017/02/03/testquickwidget.jpg

    То есть не указывается протокол и домен сайта. Поэтому если Вы извлечёте все адреса изображений со страницы, то не сможете скачать изображения без дополнительной обработки, а именно без подстановки домена и протокола в начале строки, получив данную ошибку.

    QNetworkReply::ServiceUnavailableError

    Соответствует ошибке

    503 Service Unavailable («сервис недоступен»)

    в протоколе http

    QNetworkReply::ProtocolInvalidOperationError

    В данном случае протокол определён, но точное соответствие ошибке из протокола http не прослеживается, относительно других протоколов также может быть что угодно.

    QNetworkReply::UnknownNetworkError

    Наиболее частый вариант того, чему может соответствовать данная ошибка является ошибка шлюза

    502 Bad Gateway («плохой, ошибочный шлюз»)

    в протоколу http

    QNetworkReply::UnknownProxyError

    Также может быть ошибка 502, но уже в варианте с прокси-сервером

    Ошибки QNetworkReply::UnknownContentError,QNetworkReply::ProtocolFailure, QNetworkReply::UnknownServerError

    С данными ошибками затрудняюсь найти рабочее соответствие, буду рад подсказке, если кто сталкивался.

    Пример с выводом ошибки в qDebug

    Можно проверять ошибку по сигналу завершения запроса от

    QNetworkAccessManager

    в слоте, который подключается для обработки результата запроса.

    manager = new QNetworkAccessManager(this);
    connect(manager, &QNetworkAccessManager::finished, this, &Downloader::onResult);
    

    В данном случае имеется класс-обёртка над классом

    QNetworkAccessManager

    с названием

    Downloader

    . У этого класса имеется слот

    onResult

    , который в свою очередь отвечает за обработку результата ответа

    QNetworkAccessManager

    .

    void Downloader::onResult(QNetworkReply *reply)
    {
        // Если в процессе получения данных произошла ошибка
        if(reply->error()){
            // Сообщаем об этом и показываем информацию об ошибках
            qDebug() << "ERROR";
            // Здесь получаем один из enum NetworkError, то есть код ошибки
            qDebug() << reply->error();
        } else {
            // ToDo something
        }
    }
    

    Понравилась статья? Поделить с друзьями:
  • Ошибка при скачивании perfect world
  • Ошибка при сканировании cc4 006 00000000
  • Ошибка при скачивании minecraft windows 10 edition
  • Ошибка при системном вызове как исправить
  • Ошибка при скачке торрента write to disk