现在的位置: 首页 > 综合 > 正文

ntp时间获取

2013年10月13日 ⁄ 综合 ⁄ 共 4132字 ⁄ 字号 评论关闭

//ntp时间获取

char szIP[512]={0};

BOOL bF = HostNameToIP("www.google.com",szIP);

if (bF)

{

printf("%s/n",szIP);

}

 

SYSTEMTIME time;

BOOL bFlag=GetCurTime(time,"61.153.197.226");

 

char szUrl[512]={0};

BOOL bFl=IPToHostName("74.125.153.99",szUrl);

if(bFl){

printf("%s/n",szUrl);

}

 

//ntp.h

///////////////////////////////////////////////////////////////////////////////////////////////////////////

BOOL GetCurTime(SYSTEMTIME& time,char* ip);

 

bool HostNameToIP(char* HostName,char* ip);

bool IPToHostName(char* ip,char* HostName); 

 

 

//ntp.cpp

///////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "StdAfx.h" //预处理头

 

#include "windows.h"

#include "time.h"

#include <winsock.h>

#pragma comment(lib,"ws2_32.lib")

 

struct   NTP_Packet{

int   Control_Word;   

int   root_delay;   

int   root_dispersion;   

int   reference_identifier;   

__int64   reference_timestamp;   

__int64   originate_timestamp;   

__int64   receive_timestamp;   

int   transmit_timestamp_seconds;   

int   transmit_timestamp_fractions;   

};

 

/** 本地时间 */

BOOL GetCurTime(SYSTEMTIME& time,char* ip)

{

WORD wVersionRequested;

WSADATA wsaData;

wVersionRequested = MAKEWORD( 1, 1 );

if (0!=WSAStartup(wVersionRequested, &wsaData)) 

{

WSACleanup();

return 0;

}

if (LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1) 

{

WSACleanup( );

return 0; 

}

SOCKET soc=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);

struct sockaddr_in addrSrv;

addrSrv.sin_addr.S_un.S_addr=inet_addr(ip);//inet_addr("192.43.244.18");

// addrSrv.sin_addr.S_un.S_addr=inet_addr("210.72.145.44");

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(123);

NTP_Packet NTP_Send,NTP_Recv; 

NTP_Send.Control_Word   =   htonl(0x0B000000);   

NTP_Send.root_delay   =   0;   

NTP_Send.root_dispersion   =   0;   

NTP_Send.reference_identifier   =   0;   

NTP_Send.reference_timestamp   =   0;   

NTP_Send.originate_timestamp   =   0;   

NTP_Send.receive_timestamp   =   0;   

NTP_Send.transmit_timestamp_seconds   =   0;   

NTP_Send.transmit_timestamp_fractions   =   0; 

if(SOCKET_ERROR==sendto(soc,(const char*)&NTP_Send,sizeof(NTP_Send),

0,(struct sockaddr*)&addrSrv,sizeof(addrSrv)))

{

closesocket(soc);

return 0;

}

int sockaddr_Size =sizeof(addrSrv);

if(SOCKET_ERROR==recvfrom(soc,(char*)&NTP_Recv,sizeof(NTP_Recv),

0,(struct sockaddr*)&addrSrv,&sockaddr_Size))

{

closesocket(soc);

return 0;

}

closesocket(soc);

WSACleanup();

SYSTEMTIME newtime;

struct tm *lpLocalTime;

float Splitseconds; 

time_t ntp_time=ntohl(NTP_Recv.transmit_timestamp_seconds)-2208988800;

lpLocalTime=localtime(&ntp_time); 

if(lpLocalTime==NULL)

{

return 0;

}

newtime.wYear      =lpLocalTime->tm_year+1900;   

newtime.wMonth     =lpLocalTime->tm_mon+1;

newtime.wDayOfWeek =lpLocalTime->tm_wday;

newtime.wDay       =lpLocalTime->tm_mday;   

newtime.wHour      =lpLocalTime->tm_hour;   

newtime.wMinute    =lpLocalTime->tm_min;   

newtime.wSecond    =lpLocalTime->tm_sec; 

Splitseconds=(float)ntohl(NTP_Recv.transmit_timestamp_fractions);   

Splitseconds=(float)0.000000000200 * Splitseconds;   

Splitseconds=(float)1000.0 * Splitseconds;   

newtime.wMilliseconds   =   (unsigned   short)Splitseconds;   

time= newtime;

return TRUE;

}

 

 

 

/** 主机名解析为ip */

bool HostNameToIP(char* HostName,char* ip)

{

WORD wVersionRequested;

WSADATA wsaData;

wVersionRequested = MAKEWORD( 1, 1 );

if (0!=WSAStartup(wVersionRequested, &wsaData)) 

{

WSACleanup();

return false;

}

if (LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1) 

{

WSACleanup( );

return false; 

}

char *pURL=HostName;   

struct hostent *hp;

char **p;

hp = gethostbyname(pURL);

if(hp==NULL) {return false; }

for (p = hp->h_addr_list; *p ; p++) //循环显示所有IP

{

char *sIP;

sIP = inet_ntoa(*(struct in_addr*)*p);

CString strIP = sIP;

// printf("%s/r/n",strIP.GetBuffer(0));

 

int pos=strlen(ip);

strcat(ip,strIP.GetBuffer(0));

strcat(ip,",");

}

 

WSACleanup();

return true;

}

 

/** ip地址解析为主机名 */

bool IPToHostName(char* ip,char* url) 

{

WORD wVersionRequested;

WSADATA wsaData;

wVersionRequested = MAKEWORD( 1, 1 );

if (0!=WSAStartup(wVersionRequested, &wsaData)) 

{

WSACleanup();

return false;

}

if (LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1) 

{

WSACleanup( );

return false; 

}

 

//--------------------转换过程--------------------------[

u_long addr;

struct hostent *hp;

char **p;

 

if ((int)(addr = inet_addr(ip)) == -1) {

return false;

}

 

hp = gethostbyaddr((char *)&addr, sizeof (addr), AF_INET);

if (hp == NULL) {

return false;

}

 

strcpy(url,hp->h_name);

//--------------------转换过程--------------------------]

WSACleanup();

 

return true;

}

 

抱歉!评论已关闭.