"访问冲突"、"分配错误":POCO NTPClient 请求C++
'Access Violation', 'bad allocation': POCO NTPClient request C++
我想做一个简单的程序,它执行以下操作:"从互联网时钟获取原子时间"。我已经做了另一个使用FTP的程序,我用Poco::Net库做了这个。
我尝试使用NTPClient,因为我读到这是网络时间协议。更详细地说,这是我使用的信息:
'NIST 服务器侦听端口 123 上的 NTP 请求,并通过 以 NTP 格式发送 UDP/IP 数据包。数据包 包括一个 64 位时间戳,其中包含自 UTC 秒以来的时间 1900 年 1 月 1 日,分辨率为 200 ps。
我的来源是这个网站: nist
另外,我从这里尝试了各种服务器,其状态为"所有可用服务":服务器
下面是一个崩溃和/或引发异常的小示例。这是一个例外 std::bad_alloc,有时它会因"访问冲突"而崩溃(见下文)。我正在Windows 8上使用VC++ 12进行编译
我使用的文档: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,它会因访问冲突而崩溃,而某些 IP 会引发bad_alloc异常并终止。不知道这条信息是否有帮助。此外,即使我将完整的垃圾作为 IP 地址(例如"foobar")输入,它们也会发生错误。
在有人有想法之前,我会检查来源并尝试找到一些东西(尽管以我的经验水平来说这很难)。
更新2:在设置库以调试库之后(我想要更多信息,想要添加 PocoNetd.pdb(我认为它也允许 VS 调试 pocos 代码?奇怪,编程很奇怪...
我在这里找不到 POCO 的问题。但是发布的代码存在问题 - 没有 std::exception::message() 这样的东西,所以代码无法编译。将 message() 更改为 what() 并执行,得到"找不到主机"异常描述。将NTP服务器更改为"pool.ntp.org",它执行正常。以下是在 Windows 8、VS2013、64 位版本上运行良好的代码:
#include <iostream>
#include <stdexcept>
#include <Poco/Net/NTPClient.h>
using namespace Poco::Net;
int main()
{
try {
NTPClient client{ IPAddress::Family::IPv4 };
client.request("pool.ntp.org");
}
catch (std::exception& e) {
std::cerr << e.what() << 'n';
}
}
编辑:原始代码中"找不到主机"异常的原因是端口嵌入在传递给request()调用的字符串中,但实现对端口进行硬编码并仅期望IP地址或主机名。
EDIT2:只是一个建议:如果您的目标是运行调试二进制文件,那么您可以认为您的问题已解决。否则,您应该能够使用 POCO 库的发布版本生成和运行应用程序的发布版本。有关如何执行此操作的示例,请查看任何 Poco::Net 示例 VS 项目设置。
在设置库以调试库之后(我想要更多信息,想要添加 PocoNetd.pdb(我认为它也允许 VS 调试 pocos 代码?奇怪,编程很奇怪...我也能够如此成功地编译和运行一个实现版本。
简而言之:我搞砸了我的设置,而 POCO 却为我完美地工作。有趣的是,通过搞砸调试/发布会得到什么样的错误。
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 如何在boost beast http请求中设置http头
- 发送一个带有libcurl C++问题的帖子请求:s
- 在多个核心中处理一个HTTP请求
- 错误:请求非类类型为"MULTIMEDIA_FILME [500]"的成员|
- 使用 Winsock2.h C++向不和谐 API 发送 HTTP 请求时出现问题
- 每个服务器请求的内存预算
- std::getline没有在while循环中重新请求用户输入
- 请求最简单的 OpenMP 目标 GPU 示例
- 请求有关C++中嵌入 for 循环的帮助
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 使用 winsock 接收 http 请求
- QNetworkAccessManager 稍后在添加请求时删除
- 为什么我收到来自谷歌的错误请求?
- 从网链套接字请求连接设备的列表
- libcurl :C++处理多个异步请求
- 对于 http 请求,python 比 c++ 快吗?
- 通过引用传递向量是请求 std::分配器
- 为什么当通过 TCP 发送的消息速率增加时,请求-响应消息对的延迟会降低?
- "访问冲突"、"分配错误":POCO NTPClient 请求C++