C++設(shè)置系統(tǒng)時間及系統(tǒng)時間網(wǎng)絡(luò)更新的方法
更新時間:2014年10月20日 11:50:56 投稿:shichen2014
這篇文章主要介紹了C++設(shè)置系統(tǒng)時間及系統(tǒng)時間網(wǎng)絡(luò)更新的方法,涉及網(wǎng)絡(luò)程序設(shè)計與系統(tǒng)函數(shù)的使用,需要的朋友可以參考下
本文實例講述了C++設(shè)置系統(tǒng)時間及系統(tǒng)時間網(wǎng)絡(luò)更新的方法。分享給大家供大家參考。具體實現(xiàn)方法如下:
復(fù)制代碼 代碼如下:
//根據(jù)返回的時間設(shè)置系統(tǒng)時間
void setTimeFromTP(ULONG ulTime)
{
FILETIME ft;
SYSTEMTIME st;
//將基準時間轉(zhuǎn)換成windows文件時間
st.wYear = 1900;
st.wMonth = 1;
st.wDay = 1;
st.wHour = 0;
st.wMinute = 0;
st.wSecond = 0;
st.wMilliseconds = 0;
SystemTimeToFileTime(&st, &ft);
LONGLONG* pLLong = (LONGLONG*)&ft;
*pLLong += (LONGLONG)10000000*ulTime;
FileTimeToSystemTime(&ft, &st);
::SetSystemTime(&st);
}
void main()
{
CInitSock initSock;
SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s == INVALID_SOCKET)
{
printf("socket error...");
return;
}
sockaddr_in servAddr = {0};
servAddr.sin_family = AF_INET;
servAddr.sin_port = ::htons(37);
servAddr.sin_addr.S_un.S_addr = ::inet_addr("69.25.96.13"); //別用210.72.145.44這個IP, 這是天朝的 常TMD不返回值
if (SOCKET_ERROR == ::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)))
{
printf("connect error..");
return;
}
//接收時間
ULONG ulTime = 0;
int nRecv = ::recv(s, (char*)&ulTime, sizeof(ulTime), 0);
if (nRecv > 0) //收到數(shù)據(jù)
{
ulTime = ::ntohl(ulTime);
setTimeFromTP(ulTime);
}
else
{
printf("recv error...");
return;
}
::closesocket(s);
printf("*******************************");
getchar();
}
void setTimeFromTP(ULONG ulTime)
{
FILETIME ft;
SYSTEMTIME st;
//將基準時間轉(zhuǎn)換成windows文件時間
st.wYear = 1900;
st.wMonth = 1;
st.wDay = 1;
st.wHour = 0;
st.wMinute = 0;
st.wSecond = 0;
st.wMilliseconds = 0;
SystemTimeToFileTime(&st, &ft);
LONGLONG* pLLong = (LONGLONG*)&ft;
*pLLong += (LONGLONG)10000000*ulTime;
FileTimeToSystemTime(&ft, &st);
::SetSystemTime(&st);
}
void main()
{
CInitSock initSock;
SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s == INVALID_SOCKET)
{
printf("socket error...");
return;
}
sockaddr_in servAddr = {0};
servAddr.sin_family = AF_INET;
servAddr.sin_port = ::htons(37);
servAddr.sin_addr.S_un.S_addr = ::inet_addr("69.25.96.13"); //別用210.72.145.44這個IP, 這是天朝的 常TMD不返回值
if (SOCKET_ERROR == ::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)))
{
printf("connect error..");
return;
}
//接收時間
ULONG ulTime = 0;
int nRecv = ::recv(s, (char*)&ulTime, sizeof(ulTime), 0);
if (nRecv > 0) //收到數(shù)據(jù)
{
ulTime = ::ntohl(ulTime);
setTimeFromTP(ulTime);
}
else
{
printf("recv error...");
return;
}
::closesocket(s);
printf("*******************************");
getchar();
}
希望本文所述對大家的C++程序設(shè)計有所幫助。
相關(guān)文章
c++帶有string的結(jié)構(gòu)體賦值和清零問題
這篇文章主要介紹了c++帶有string的結(jié)構(gòu)體賦值和清零問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01關(guān)于C/C++中typedef的定義與用法總結(jié)
在C還是C++代碼中,typedef都使用的很多,在C代碼中尤其是多,typedef與#define有些相似,其實是不同的,特別是在一些復(fù)雜的用法上,需要的朋友可以參考下2012-12-12