alex_lipҚаң. 16, 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 хостинг.Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
AD
- Akiv Doros
- Қар. 11, 2024, 2:58 Т.Қ.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:50ұпай,
- Бағалау ұпайлары-4
m
- molni99
- Қаз. 26, 2024, 1:37 Т.Ж.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:80ұпай,
- Бағалау ұпайлары4
m
- molni99
- Қаз. 26, 2024, 1:29 Т.Ж.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:20ұпай,
- Бағалау ұпайлары-10
Соңғы пікірлер
ИМ
Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Енді форумда талқылаңыз
Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
NSProjectМаусым 4, 2022, 3:49 Т.Ж.
IscanderCheҚаз. 31, 2024, 3:43 Т.Қ.
Добрый день!
Теоретически можно использовать 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 менеджером