实现网络时间同步或获取
libcurl是一个支持多种协议的客户端库,包括HTTP。你可以使用它发送HTTP请求到时间服务器(如http://worldtimeapi.org/api/timezone/UTC)来获取时间信息。
以下是使用libcurl从HTTP时间服务器获取时间的代码样例,亲测有效:
#include <iostream>
#include <string>
#include <curl/curl.h>
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, std::string *userp) {
((std::string*)userp)->append((char*)contents, size * nmemb);
return size * nmemb;
}
int main() {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if(curl) {
std::string readBuffer;
curl_easy_setopt(curl, CURLOPT_URL, "http://worldtimeapi.org/api/timezone/UTC");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
res = curl_easy_perform(curl);
if(res != CURLE_OK)
std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
else
std::cout << readBuffer << std::endl;
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
readBuffer的结果如下
{
"utc_offset": "+00:00",
"timezone": "UTC",
"day_of_week": 4,
"day_of_year": 270,
"datetime": "2024-09-26T10:40:29.045214+00:00",
"utc_datetime": "2024-09-26T10:40:29.045214+00:00",
"unixtime": 1727347229,
"raw_offset": 0,
"week_number": 39,
"dst": false,
"abbreviation": "UTC",
"dst_offset": 0,
"dst_from": null,
"dst_until": null,
"client_ip": "211.103.191.242"
}