Я хотел сделать простую программу, которая делает следующее: «Получить атомное время из интернет-часов». Я уже сделал другую программу, которая использует FTP, и я сделал это с библиотекой Poco::Net.
Я попытался использовать NTPClient, так как я читал, что это сетевой протокол времени. Более подробно вот информация, с которой я работал:
«Серверы NIST прослушивают запрос NTP на порту 123 и отвечают, отправляя пакет данных udp/ip в формате NTP. Пакет данных включает 64-битную метку времени, содержащую время в секундах UTC с 1 января 1900 года с разрешением 200 пс».
Моим источником является этот веб-сайт: nist
Кроме того, я пробовал различные серверы отсюда, которые имели статус «все службы доступны»: серверы< /а>
Вот небольшой пример, который дает сбой и/или выдает исключение. Это исключение std::bad_alloc и иногда происходит сбой с "нарушением прав доступа" (см. ниже). Я компилирую с помощью VC++12 в Windows 8.
Документы, с которыми я работал: NTPClient
#include <iostream>
#include <stdexcept>
#include <Poco/Net/NTPClient.h>
using namespace Poco::Net;
int main()
{
try {
NTPClient client { IPAddress::Family::IPv4 };
// this is where the bad_alloc comes from:
client.request("129.6.15.30:123"); // or any other server
}
catch (std::exception& e) {
std::cerr << e.message() << '\n';
}
}
Я не знаю, почему этот код вызывает исключение bad_alloc или нарушение прав доступа, поэтому я надеюсь, что кто-нибудь сможет указать, что я делаю неправильно. Я сомневаюсь, что это ошибка в библиотеке, возможно, я просто неправильно ее использую (может быть, это так?).
Обновление Я также иногда получаю сообщение "...0xC0000005: Нарушение прав доступа к местоположению чтения 0x00E22CA9". (вторая ячейка памяти меняется). Однако, в зависимости от IP-адреса, ошибка bad_alloc все еще иногда возникает (без сбоев). Таким образом, для некоторых IP-адресов он вылетает с нарушением прав доступа, а для некоторых выдает исключение bad_alloc и завершает работу. Не знаю, может ли эта информация быть полезной. Кроме того, возникает ошибка, даже если я подаю полный мусор в качестве IP-адреса, например. "фубар".
Пока у кого-то не появится идея, я изучу исходники и попытаюсь что-нибудь найти (хотя с моим уровнем опыта это сложно).
Обновление 2: после настройки библиотек для отладки библиотек (мне нужна была дополнительная информация, я хотел добавить PocoNetd.pdb (я думаю, что это позволяет VS также отлаживать код pocos?), это больше не происходит ... странно, программирование - это странно. ..
bad_alloc
. - person Collin Dauphinee   schedule 31.12.2014