资源简介
C++获得网络时间函数库,包含get_internet_time.cpp,get_internet_time.h两个文件,以及调用示例
代码片段和文件信息
#include “get_internet_time.h“
using namespace std;
/*
Name: FindHostIP
Function: get IP address across ServerName
params: const char *pServerName
return: IPNumber
*/
IPNumber FindHostIP(const char *pServerName)
{
HOSTENT *pHostent;
// Get hostent structure for hostname:
if (!(pHostent = gethostbyname(pServerName)))
throw HRException(“could not resolve hostname.“);
// Extract primary IP address from hostent structure:
if (pHostent->h_addr_list && pHostent->h_addr_list[0])
return *reinterpret_cast(pHostent->h_addr_list[0]);
return 0;
}
/*
Name: FillSockAddr
Function: Fill socket with address(serverName)
params: sockaddr_in *pSockAddr const char *pServerName int portNumber
return: None
*/
void FillSockAddr(sockaddr_in *pSockAddr const char *pServerName int portNumber)
{
// Set family port and find IP
pSockAddr->sin_family = AF_INET;
pSockAddr->sin_port = htons(portNumber);
pSockAddr->sin_addr.S_un.S_addr = FindHostIP(pServerName);
}
/*
Name: RequestHeaders
Function: Key Function Request time from time server
params: const char *pServername time_t *timeRecv
return: bool if get internet time successfullyreturn trueelsereturn false
*/
bool RequestHeaders(const char *pServername time_t *timeRecv)
{
int slen = 0;
//time_t timeRecv;
SOCKET hSocket = INVALID_SOCKET;
char recvBuf[REC_BUFFER_SIZE];
sockaddr_in sockAddr = { 0 };
bool bSuccess = true;
try{
// Lookup hostname and fill sockaddr_in structure:
FillSockAddr(&sockAddr pServername SERVER_PORT);
// Create socket
if ((hSocket = socket(AF_INET SOCK_DGRAM IPPROTO_UDP)) == INVALID_SOCKET)
throw HRException(“could not create socket.“);
// Connect to server
if (connect(hSocket reinterpret_cast(&sockAddr) sizeof(sockAddr)) != 0)
throw HRException(“could not connect.“);
//cout << “connected “ << inet_ntoa(sockAddr.sin_addr) << “:“ << SERVER_PORT << endl;
// send request part 1
if (send(hSocket msg sizeof(msg) 0) == SOCKET_ERROR)
throw HRException(“failed to send data.“);
//cout << “Dumping received data...\n\n“;
// Loop to print all data
slen = recv(hSocket recvBuf REC_BUFFER_SIZE 0);
//part where we take time out of recvBuf
*timeRecv = ntohl(((time_t*)recvBuf)[4]);
if (*timeRecv>0)*timeRecv -= 2208988800U;
}
catch (HRException e){
cerr << “\nError: “ << e.what() << endl;
bSuccess = false;
}
if (hSocket != INVALID_SOCKET){
closesocket(hSocket);
}
return bSuccess;
}
/*
Name: time_t_2_tm
Function: Transfer time_t to tm
params: const time_t *tt struct tm *tim
return: None
Author: Leo Ma
Date: 2019.09.17
*/
void time_t_2_tm(const time_t *tt struct tm *tim)
{
tim = localtime(tt);
tim->tm_year += 1900;
tim->tm_mon += 1;
}
/*
Name: get_internet_time
Function: check windows socket version and get internet 属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5175 2019-09-18 14:46 get internet time\get_internet_time.cpp
文件 1419 2019-09-17 16:58 get internet time\get_internet_time.h
目录 0 2019-09-18 14:47 get internet time\
- 上一篇:C++ 汉字识别源代码
- 下一篇:利用多个二维点拟合圆、多个三维点拟合球面
相关资源
- Deep Belief Nets in C++ and CUDA C Volume 2 Au
- C++获取计算机的CPU ID,硬盘序列号等
- C++头文件转delphi工具 + 源码
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
川公网安备 51152502000135号
评论
共有 条评论