C++ Builder 下 TIdSNTP 控件获取 Internet 时间
C++ Builder 集成了一组网络控件,功能十分强大,其中 TIdSNTP 用于在互联网上获取标准时间,下面就简单介绍该组件的使用。
XP下的时钟有几个时间服务器可以利用一下,带入IdSNTP1->Host 可查找,例如多线程下同时获取时间,以最先获取到为准。
time.windows.com
time.nist.gov (这个貌似比较快)
time-nw.nist.gov
time-a.nist.gov
代码如下:
// 时间服务器的端口
#define SNTPPort 123
// 接收超时时间 单位 秒
#define ReceiveTimeoutSecond 10
// 客户端发送时间超时时间
#define SendTimeoutSecond 5
try
{
// 校时器
TIdSNTP *IdSNTP1 = new TIdSNTP(NULL);
// 连接主机
IdSNTP1->Host = "time.nist.gov";
IdSNTP1->Port = SNTPPort;
// 毫秒 乘以 1000 转换为秒
IdSNTP1->ReceiveTimeout = ReceiveTimeout * 1000;
// IdSNTP1->Active = true;
// 如果连接正常
try
{
if(IdSNTP1->SyncTime() == true)
{
// 成功获得时间
TDateTime RemoteDate = IdSNTP1->DateTime;
}
}
catch(...) // __finally
{
// ...
}
delete IdSNTP1;
}
__finally
{
}