999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

用C語言實現(xiàn)的在線對時器

2012-04-29 11:33:22丁元
科技資訊 2012年29期

丁元

摘要:利用Internet傳送標準時間信息稱做網(wǎng)絡(luò)授時。目前網(wǎng)上有很多授時服務(wù)器,我們可以用高級語言寫一個在線對時器,獲取授時服務(wù)器上的時間并以此來校對本機時間。本文以C語言為工具,實現(xiàn)了一個簡單的在線對時器的開發(fā)。

關(guān)鍵詞:C語言 在線對時

中圖分類號:TP302 文獻標識碼:A 文章編號:1672-3791(2012)10(b)-0006-01

在線對時器的作用是從Internet上獲取準確的時間。它的基本設(shè)計思想是開發(fā)出客戶端工具,以此登錄到網(wǎng)絡(luò)上的授時服務(wù)器并獲取它的準確時間,然后根據(jù)這個時間來校對本機的系統(tǒng)時間。下面以C語言為開發(fā)工具,介紹一種簡單的在線定時器的實現(xiàn)方法。

1 登錄到授時服務(wù)器

Internet上可用的授時服務(wù)器很多,這里采用香港的官方授時服務(wù)器(IP地址:210.0.235.14)。

核心代碼如下。

//初始化套接字

SOCKETsock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

SOCKADDR_INsa;

sa.sin_family=AF_INET;

//設(shè)置套接字連接服務(wù)器端的端口(客戶端端口由套接字動態(tài)分配,無需指定)

sa.sin_port=htons(IPPORT_TIMESERVER);//IPPORT_TIMESERVER是宏,對應(yīng)的

//值是37,它代表TIMESERVER的端口號

//設(shè)置要連接到的授時服務(wù)器的IP地址

sa.sin_addr.S_un.S_addr=inet_addr("210.0.235.14");

//指定了端口號和IP地址之后,開始登錄到授時服務(wù)器

connect(sock,(SOCKADDR*)&sa,sizeof(sa));

2 接收授時服務(wù)器傳過來的信息

我們這里采用的授時服務(wù)器,返回給客戶端的是1900年1月1日0點0分0秒到現(xiàn)在的秒數(shù),是整型數(shù)字。而我們將要使用的接收服務(wù)器返回的消息的recv函數(shù),它相應(yīng)的參數(shù)是字符指針類型,因此需要進行類型轉(zhuǎn)換,這在代碼中將得到體現(xiàn)。具體如下。

//定義用來接收返回的時間秒數(shù)的變量

unsignedlongulTime=0;

//使用recv函數(shù)接收以秒數(shù)代表的當(dāng)前時間

recv(sock,(char*)&ulTime,sizeof(unsignedlong),0);

那么這個秒數(shù)是多少呢?我們可以將它打印出來看一下:

//定義字符緩沖區(qū)

TCHARbuff[256];

//將緩沖區(qū)清零

ZeroMemory(buff,sizeof(buff)/sizeof(TCHAR));

將接收的秒數(shù)寫到定義的緩沖區(qū)中

wsprintf(buff,"%i",ulTime);

//以對話框的形式顯示接收的秒數(shù)

MessageBox(NULL,buff,TEXT("以秒數(shù)代表的當(dāng)前時間"),MB_OK);

我們得到的對話框如圖1所示。

為什么得到的結(jié)果明顯不對呢?這涉及到字節(jié)順序的問題,也就是說我們的客戶機存儲的整數(shù)的字節(jié)順序和授時服務(wù)器不一致,導(dǎo)致傳過來的ulTime沒有得到正確的還原。這個問題很好解決,我們在將ulTime寫到緩沖區(qū)之前,使用ntohl函數(shù)對ulTime做個處理即可(ulTime=ntohl(ulTime))。

3 將秒數(shù)表示的時間轉(zhuǎn)換為字符形式的時間

下面我們要將上面得到的一串?dāng)?shù)字轉(zhuǎn)換為我們看得懂的字符形式的時間,我們用以下代碼實現(xiàn)。

SYSTEMTIMEst;

UINT64uiCurTime,uiBaseTime,uiResult;

uiBaseTime=((UINT64)HIGHTIME<<32)+LOWTIME;

uiCurTime=(UINT64)ulTime*(UINT64)10000000;

uiResult=uiBaseTime+uiCurTime;

FileTimeToSystemTime((LPFILETIME)&uiResult,&st);

以上代碼將接收到的以ulTime代表的秒數(shù)轉(zhuǎn)換為了st這個結(jié)構(gòu)體變量所代表的字符形式的時間(st中包含了年、月、日、時、分、秒的信息)。

我們將st中的內(nèi)容打印出來看一下,用以下代碼實現(xiàn)。

TCHARbuff[256];

ZeroMemory(buff,sizeof(buff)/sizeof(TCHAR));

wsprintf(buff,TEXT("%i年%i月%i日%i:%i:%i"),st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);//中國時區(qū)在東八區(qū),因此在小時上加8;

MessageBox(NULL,buff,TEXT("字符形式的時間"),MB_OK);

打印出來的結(jié)果如圖2所示。

為什么得到的小時不對呢?很簡單,中國在東八區(qū),應(yīng)該在小時上加上8,也就是將st.wHour改為st.wHour+8。

4 將得到的時間設(shè)成本機系統(tǒng)時間

經(jīng)過以上的測試,我們已經(jīng)得到了授時服務(wù)器上的準確時間。將這個時間設(shè)置成本地系統(tǒng)時間即可,代碼只需一句。

SetSystemTime(&st);//將st這個結(jié)構(gòu)體變量所對應(yīng)的時間賦給本機。

5 結(jié)語

本文介紹了用C語言實現(xiàn)的在線對時器開發(fā)的基本思路和核心代碼。用其它高級語言開發(fā)在線對時器的基本方法與此類似。希望這樣的客戶端工具的開發(fā),對于想深入學(xué)習(xí)網(wǎng)絡(luò)編程的朋友,能起到一個鋪墊的作用。

參考文獻

[1] 譚浩強.C程序設(shè)計[M].清華大學(xué)出版社,1999.

[2] 佩措爾德.Windows程序設(shè)計[M].清華大學(xué)出版社,2010.

主站蜘蛛池模板: 97青草最新免费精品视频| 国产精品永久久久久| 伊人久久大香线蕉综合影视| 曰韩人妻一区二区三区| 欧美三级日韩三级| 国产国语一级毛片在线视频| 亚洲午夜福利精品无码| 国产精品人莉莉成在线播放| 91在线日韩在线播放| 91青青草视频在线观看的| 精品久久久久久久久久久| 在线另类稀缺国产呦| 日本国产在线| 免费国产小视频在线观看| 亚洲精品国产精品乱码不卞| 看av免费毛片手机播放| 久久精品女人天堂aaa| 国产自在线播放| 亚洲精品中文字幕无乱码| 日本精品中文字幕在线不卡| 91欧美在线| 99这里只有精品6| 五月天天天色| 国产精品大白天新婚身材| 精品伊人久久久大香线蕉欧美| 国产va免费精品观看| 亚洲美女一区二区三区| 91久久国产综合精品女同我| 久久黄色一级片| 草草线在成年免费视频2| 日本一区二区不卡视频| 波多野结衣的av一区二区三区| 国产一级妓女av网站| 亚洲IV视频免费在线光看| 日本三区视频| 99热亚洲精品6码| 夜夜操狠狠操| 欧美精品色视频| 久久精品66| www.精品国产| 国产原创演绎剧情有字幕的| 成人一区专区在线观看| 国产日韩精品一区在线不卡| 国内精品小视频在线| 真人免费一级毛片一区二区| 青青青国产视频手机| 日本欧美一二三区色视频| 国产91九色在线播放| 国产麻豆永久视频| 国产精品成人一区二区不卡| 国产麻豆aⅴ精品无码| 欧美区国产区| 成人亚洲国产| 激情成人综合网| 欧美一级夜夜爽| 国产丰满大乳无码免费播放| 中国国语毛片免费观看视频| 欧美精品二区| 青青草国产精品久久久久| 美女裸体18禁网站| 亚洲欧美不卡| 日韩美毛片| 国产精品亚洲一区二区三区z | 国产成人高清精品免费5388| 亚洲天堂精品在线| 国产一级裸网站| 久久天天躁狠狠躁夜夜躁| 国产精品视频免费网站| 国产精品女主播| 无码av免费不卡在线观看| 亚洲愉拍一区二区精品| 国产视频一区二区在线观看| 99精品免费在线| 国产欧美日韩18| 日韩在线中文| 日韩成人免费网站| 亚洲成AV人手机在线观看网站| 国产欧美精品专区一区二区| 99久久精品免费看国产电影| 国产凹凸视频在线观看| 亚洲精品国产综合99| 国产免费一级精品视频 |