alex_lipJan. 16, 2018, 1:55 a.m.
Как проверить доступность сервера
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 - но как мне кажется в этом случае пинг не достаточен. И он не кросс - платформен.
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
d
- dsfs
- April 26, 2024, 1:56 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:80points,
- Rating points4
d
- dsfs
- April 26, 2024, 1:35 a.m.
C++ - Test 001. The first program and data types
- Result:73points,
- Rating points1
Last comments
Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий КононенкоFeb. 4, 2024, 10:50 p.m.
EVADec. 25, 2023, 7:30 a.m.
Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Now discuss on the forum
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 AcademicsApril 20, 2024, 4:45 a.m.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел ДорофеевApril 13, 2024, 11:35 p.m.
Вернуть старое поведение 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 менеджером