Почему может не работать загрузка файлов с помощью C++? У одного из пользователей моей программы на C++ не работает загрузка файлов через HTTP. В браузере и в (ping «host») все в порядке, но программа не получает никакого ответа от сервера.
Я попробовал URLDownloadToFile и она возвращает -2146699211. В OnProgress status_code имеет значения 1 и 2 и дальше не идёт.std::string url = "http://r-rp.ru/projects/crmp/info.xml";
DeleteUrlCacheEntryA(url.c_str());
URLDownloadToFileA(NULL, url.c_str(), "info.xml", 0, NULL);
Я также пытался использовать Boost.Asio, но после долгой загрузки он не возвращал никакого ответа вообще.ip::tcp::resolver resolver(service);
ip::tcp::resolver::query query("r-rp.ru", "http");
ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
ip::tcp::resolver::iterator end;
ip::tcp::socket socket(service);
boost::system::error_code error = boost::asio::error::host_not_found;
while (error && endpoint_iterator != end)
{
socket.close();
socket.connect(*endpoint_iterator++, error);
}
boost::asio::streambuf request;
std::ostream request_stream(&request);
request_stream > http_version;
unsigned int status_code;
response_stream >> status_code;
std::string status_message;
std::getline(response_stream, status_message);
boost::asio::read_until(socket, response, "\r\n\r\n");
std::string header;
while (std::getline(response_stream, header) && header != "\r") {}
std::ofstream outFile("info.xml", std::ofstream::out | std::ofstream::binary);
if (response.size() > 0)
{
outFile << &response;
}
while (boost::asio::read(socket, response, boost::asio::transfer_at_least(1), error))
{
outFile << &response;
}
outFile.close();
Повторюсь, такая проблема лишь у одного из пользователей, так что в целом код рабочий. В чем проблема и как ее можно выявить?

21 Авг 2019 в 06:44
219 +1
0
Ответы
1

Существует несколько причин, по которым загрузка файлов с помощью C++ может не работать у одного из пользователей:

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

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

Проблемы с HTTPS: если URL начинается с "https://" вместо "http://", то ваш код не может обрабатывать SSL-защищенные соединения. В этом случае, вам нужно использовать другие библиотеки, способные работать с SSL, такие как OpenSSL.

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

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

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

20 Апр в 13:13
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 028 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир