alex_lip16 января 2018 г. 1:55
Как проверить доступность сервера
IP сервера с которым я работаю может выглядеть по разному в зависимости от того внутри сети я нахожусь или во вне. Соответственно когда я запускаю программу - мне нужно понять по какому адресу доступен сервер по внешнему или по внутреннему(или вообще не доступен). Сейчас я вот так подключаюсь к серверу
url_sea_text = server_ip_loc+"search/sea_text/"+poisk_txt+"/"+user_id; networkManager_sea_text = new QNetworkAccessManager(); QNetworkReply *replay_sea_text = networkManager_sea_text->get(QNetworkRequest(QUrl(url_sea_text))); connect(networkManager_sea_text, &QNetworkAccessManager::finished, this, &AppCore::onResult_sea_text); connect(replay_sea_text, SIGNAL(downloadProgress(qint64,qint64)),this, SLOT(updateDownloadProgress(qint64,qint64)));
NetworkAccessManager работает асинхронно. И чтобы сильно долго не ждать надо каким-то образом по таймеру проверить, что ответа нет и пробовать другой адрес. Насколько я понимаю мне в процедуру
void AppCore::updateDownloadProgress(qint64 bytesRead, qint64 totalBytes) { QTextStream cout(stdout); cout << QString::number(bytesRead) +"/"+QString::number(totalBytes) << endl; qDebug() <<"count"<< count; if (totalBytes>0) { count=bytesRead/totalBytes; } if (count>0.2) { emit sendToQml(count); } }Добавить проверку по таймеру, который нужно запустить в момент создания коннекта. И если на заданный тайм-аут
bytesRead =0то делать replay_sea_text.abort() ?
У Вас есть урок по ping - но как мне кажется в этом случае пинг не достаточен. И он не кросс - платформен.
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
l
- laei
- 23 апреля 2024 г. 21:19
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:10баллов,
- Очки рейтинга-10
Последние комментарии
Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий Кононенко5 февраля 2024 г. 14:50
EVA25 декабря 2023 г. 23:30
Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Сейчас обсуждают на форуме
DA
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
Dr Gangil Academics20 апреля 2024 г. 19:45
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев14 апреля 2024 г. 14:35
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
Добрый день!
Теоретически можно использовать QTcpSocket, у него есть метод connectToHost.
Спасибо. Попробую. Проблема в том, что сервер может пинговаться, но служба не работать(не выдавать нужные ссылки - у меня же на серваке сервер приложений ORDS крутится). Но это уже другая проблема. Но ее тоже надо обработать. И в этом случае QNetworkAccessManager все-таки предпочтителен. Буду пробовать.
Для QTcpSocket - насколько я понял - необходимы настройки прокси сервера(если он есть) - не хочется с этим возиться.
Как и писали на форуме ожидание ответа от connect(networkManager_news, &QNetworkAccessManager::finished, this, &AppCore::onResult_net); составляет 45 секунд. Очень долго.
Как проверить что спустя 10 секунд connect(networkManager_news, &QNetworkAccessManager::finished, this, &AppCore::onResult_net); &QNetworkAccessManager::finished - не финишировал?
Сделайте в классе AppCore некоторую переменную, которая будет индикатором финиширования. Если QNetworkAccessManager::finished ещё не финишировал, то переменная должна иметь значение false, если финишировал, то в слоте onResult_net поставьте true.
Точно!!!
Как мне вЯ сейчас так пробую
передать
Ну просто интересно. Что вернет
Ну как вариант вместо singleShotFunc можно использовать лямбду и захватить QNetworkReply по указателю этой лямбдой
Ругается ошибка: 'reply_news' was not declared in this scope
qDebug() << reply_news->readAll() ;
^
QTimer::singleShot(5000, [=] {
и кстати
Сдаётся мне, что когда вы делаете обращение
ок. Проверю. В принципе обошелся вашим советом и искусственными задержками.
А все-таки - сколько на приложение нужно
networkManager = new QNetworkAccessManager(); ? Пишут что вроде бы один. С разными QNetworkReply* replay_cont.
Но у меня в этом случае чушь получается. Поэтому мне приходиться их штамповать на каждую форму (или уникальную ссылку для получения данных с сервера) Как правильно?
Тут скорее всего ситуативно, но по факту да, в большинстве задач можно обойтись и одним network менеджером