網(wǎng)絡(luò)程序課程設(shè)計(jì)實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)時(shí)程序_第1頁(yè)
網(wǎng)絡(luò)程序課程設(shè)計(jì)實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)時(shí)程序_第2頁(yè)
網(wǎng)絡(luò)程序課程設(shè)計(jì)實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)時(shí)程序_第3頁(yè)
網(wǎng)絡(luò)程序課程設(shè)計(jì)實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)時(shí)程序_第4頁(yè)
網(wǎng)絡(luò)程序課程設(shè)計(jì)實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)時(shí)程序_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、課題名稱: 實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)時(shí)程序 院 (系): 計(jì)算機(jī)工程學(xué)院 專 業(yè): 通信工程 班 級(jí): 學(xué)生姓名: 學(xué) 號(hào): 指導(dǎo)教師: 2012年6月17日目錄一、實(shí)驗(yàn)軟件3二、設(shè)計(jì)內(nèi)容3三、設(shè)計(jì)原理4四、設(shè)計(jì)過程4五、程序代碼及測(cè)試分析51、服務(wù)器:52、客戶端:73、程序運(yùn)行結(jié)果:9六、心得體會(huì)11七、參考文獻(xiàn)11摘 要:本次課程設(shè)計(jì)以visual c+ 6.0作為開發(fā)平臺(tái),完成網(wǎng)絡(luò)對(duì)時(shí)服務(wù)系統(tǒng),系統(tǒng)分為服務(wù)器端和客戶端,客戶端能夠從服務(wù)器端取出標(biāo)準(zhǔn)時(shí)間,然后同步本機(jī)時(shí)鐘。通過實(shí)踐復(fù)習(xí)鞏固課堂所學(xué)的理論知識(shí),也可以加強(qiáng)自己的實(shí)踐操作,提高對(duì)所學(xué)知識(shí)的綜合應(yīng)用能力,同時(shí)也經(jīng)過課后的上網(wǎng)查資料,同學(xué)間的相

2、互探討,逐步修改,完成了本系統(tǒng)的設(shè)計(jì),設(shè)計(jì)基本上實(shí)現(xiàn)了設(shè)計(jì)所要求的功能。一、實(shí)驗(yàn)軟件(visual c+ 6.0)visual c+ 6.0,簡(jiǎn)稱vc或者vc6.0,是微軟推出的一款c+編譯器,將“高級(jí)語(yǔ)言”翻譯為“機(jī)器語(yǔ)言(低級(jí)語(yǔ)言)”的程序。visual c+是一個(gè)功能強(qiáng)大的可視化軟件開發(fā)工具。visual c+ 6.0對(duì)網(wǎng)絡(luò)編程的支持有socket支持,wininet支持,mapi和isapi支持等。其中,windows sockets api是tcp/ip網(wǎng)絡(luò)環(huán)境里,也是internet上進(jìn)行開發(fā)最為通用的api。在tcp/ip網(wǎng)絡(luò)通信環(huán)境下,socket數(shù)據(jù)傳輸是一種特殊的i/o,它

3、也相當(dāng)于一種文件描述符,具有一個(gè)類似于打開文件的函數(shù)調(diào)用socket()??梢赃@樣理解:socket實(shí)際上是一個(gè)通信端點(diǎn),通過它,用戶的socket程序可以通過網(wǎng)絡(luò)和其他的socket應(yīng)用程序通信。二、設(shè)計(jì)內(nèi)容在局域網(wǎng)中有很多應(yīng)用軟件為了協(xié)同工作,需要保證客戶機(jī)上時(shí)間統(tǒng)一,方法是客戶機(jī)從一個(gè)時(shí)間相對(duì)正確的服務(wù)器讀取時(shí)間,以此來校正本地時(shí)間。網(wǎng)絡(luò)對(duì)時(shí)系統(tǒng)分服務(wù)器端程序和客戶端程序。在服務(wù)器端程序需要達(dá)到以下功能:能夠接收局域網(wǎng)中任一臺(tái)客戶機(jī)的對(duì)時(shí)請(qǐng)求并準(zhǔn)確向客戶機(jī)發(fā)送服務(wù)器端的時(shí)間和日期;客戶端程序要達(dá)到以下功能:能夠設(shè)定服務(wù)器的主機(jī)或者ip地址,能夠接收服務(wù)器端發(fā)送的時(shí)間和日期信息并以此校正本

4、地時(shí)間與服務(wù)器端的時(shí)間同步。按照c/s模型設(shè)計(jì)一個(gè)網(wǎng)絡(luò)對(duì)時(shí)服務(wù)系統(tǒng),系統(tǒng)分為服務(wù)器端(server)和客戶端(client)。服務(wù)器按照時(shí)間協(xié)議的要求(參考rfc-868),對(duì)發(fā)出對(duì)時(shí)請(qǐng)求的客戶端,以tcp/i p的格式返回響應(yīng)??蛻舳烁鶕?jù)服務(wù)器端的返回值設(shè)計(jì)本地時(shí)間與服務(wù)器的時(shí)間同步。三、設(shè)計(jì)原理tcp/ip網(wǎng)絡(luò)對(duì)時(shí)服務(wù)系統(tǒng)客戶端和服務(wù)器原理主要分2個(gè)部分。服務(wù)器端創(chuàng)建套接監(jiān)聽字,并為它關(guān)聯(lián)一個(gè)本地地址(指定ip地址和端口),然后進(jìn)入監(jiān)聽狀態(tài)準(zhǔn)備接受客戶的連接請(qǐng)求,為客戶端的連接請(qǐng)求,服務(wù)器調(diào)用accept函數(shù)??蛻舳藙?chuàng)建套接字即可調(diào)用conenet函數(shù)試圖連接服務(wù)器監(jiān)聽套接字,當(dāng)服務(wù)器端的

5、accept函數(shù)返回后,connect函數(shù)也返回。此時(shí)客戶端使用socket函數(shù)創(chuàng)建的套接字,雙方就可以通信了。服務(wù)器調(diào)用socket函數(shù)創(chuàng)建套接字server,調(diào)用bind綁定套接字到本地ip地址和端口,在端口監(jiān)聽并調(diào)用recvfrom函數(shù)接受客戶端的對(duì)時(shí)請(qǐng)求,并調(diào)用sendto函數(shù)發(fā)送服務(wù)器時(shí)間到客戶端,然后關(guān)閉套接字??蛻舳苏{(diào)用socket函數(shù)創(chuàng)建套接字client,調(diào)用sendto函數(shù)向服務(wù)器端發(fā)送對(duì)時(shí)請(qǐng)求,服務(wù)器端響應(yīng)請(qǐng)求之后,客戶端調(diào)用recvfrom函數(shù)從服務(wù)器端接收標(biāo)準(zhǔn)時(shí)間并設(shè)置本地時(shí)間與服務(wù)器端時(shí)間同步。四、設(shè)計(jì)過程 對(duì)時(shí)服務(wù)系統(tǒng)的基本結(jié)構(gòu)如圖:客戶端myclient服務(wù)器m

6、yserversocket()創(chuàng)建數(shù)據(jù)報(bào)套接字clientsocket()創(chuàng)建數(shù)據(jù)報(bào)套接字serverbind()與本地地址綁定在37端口等待客戶端對(duì)時(shí)請(qǐng)求 recvfrom()接收客戶端請(qǐng)求sendto()發(fā)送數(shù)據(jù)報(bào)對(duì)時(shí)請(qǐng)求 服務(wù)請(qǐng)求 recvfrom()接收服務(wù)器數(shù)據(jù)報(bào)sendto()發(fā)送數(shù)據(jù)報(bào) 服務(wù)應(yīng)答 close()關(guān)閉套接字serverclose()關(guān)閉套接字client 如上流程圖所示:服務(wù)器端調(diào)用socket函數(shù)創(chuàng)建套接字server,然后調(diào)用bind綁定套接字到本地ip地址和端口,在端口等待客戶端的對(duì)時(shí)請(qǐng)求并調(diào)用recvfrom函數(shù)接受客戶端的對(duì)時(shí)請(qǐng)求,并調(diào)用sendto函數(shù)發(fā)

7、送服務(wù)器時(shí)間到客戶端,然后關(guān)閉服務(wù)器套接字server??蛻舳苏{(diào)用socket函數(shù)創(chuàng)建套接字client,然后調(diào)用sendto函數(shù)向服務(wù)器端發(fā)送對(duì)時(shí)請(qǐng)求,服務(wù)器端響應(yīng)客戶端的對(duì)時(shí)請(qǐng)求之后,調(diào)用sendto函數(shù)發(fā)送服務(wù)器時(shí)間到客戶端,然后客戶端調(diào)用recvfrom函數(shù)接收服務(wù)器端發(fā)送過來的響應(yīng),接收標(biāo)準(zhǔn)時(shí)間并設(shè)置本地時(shí)間與服務(wù)器端時(shí)間同步。五、程序代碼及測(cè)試分析1、服務(wù)器:#pragma comment(lib,ws2_32.lib)#include#include#includeint main()wsadata wsadata;int err = wsastartup(winsock_ver

8、sion,&wsadata);if(err != 0)printf(wsastartup() failed :%dn,wsagetlasterror();return -1;socket sock = socket(af_inet,sock_stream,0);if(sock = invalid_socket)printf(socket() failed:%dn,wsagetlasterror();wsacleanup();return -1;sockaddr_in localaddr; /用于發(fā)送數(shù)據(jù)的服務(wù)器的地址結(jié)構(gòu)localaddr.sin_family = af_inet;locala

9、ddr.sin_port = htons(20000);localaddr.sin_addr.s_un.s_addr = htonl(inaddr_any); /ip地址由系統(tǒng)指定使用當(dāng)前配置的iperr = bind(sock,(sockaddr *)&localaddr,sizeof(localaddr);if(err = socket_error)printf(bind() failed:%dn,wsagetlasterror();closesocket(sock);wsacleanup();return -1;err=listen(sock,5);if(err = socket_err

10、or)printf(listen() failed:%dn,wsagetlasterror();closesocket(sock);wsacleanup();return -1;sockaddr_in clientaddr;int len = sizeof(clientaddr);while(1)printf(-網(wǎng)絡(luò)對(duì)時(shí)服務(wù)系統(tǒng)歡迎您(通信092班 陳劍鋒)-nn);printf(等待客戶端的對(duì)時(shí)請(qǐng)求n);socket sockconn = accept(sock,(sockaddr *)&clientaddr,&len);if(sockconn = invalid_socket)printf

11、(accept() failed:%dn,wsagetlasterror();closesocket(sock);wsacleanup();return -1;printf(請(qǐng)求時(shí)間同步的客戶端為:%s port:%dn,inet_ntoa(clientaddr.sin_addr),clientaddr.sin_port);char rbuf1024;while(1)memset(rbuf,0,1024);int rb = recv(sockconn,rbuf,1024,0);if(rb = socket_error)printf(recv() failed:%dn,wsagetlasterr

12、or();closesocket(sockconn);break;if(rb = 0)printf(connection is closed.nnn );shutdown(sockconn,sd_send);closesocket(sockconn);break;printf(服務(wù)器受到%d的請(qǐng)求:%sn,rb,rbuf);systemtime st; getlocaltime( &st ); printf(服務(wù)器時(shí)間:%04d-%02d-%02d %02d:%02d:%02dn,st.wyear,st.wmonth,st.wday,st.whour,st.wminute,st.wsecond

13、);int sb = send(sockconn,(char *)&st,sizeof(st),0);if(sb = socket_error)printf(send() failed:%dn,wsagetlasterror();closesocket(sockconn);wsacleanup();return -1;printf(發(fā)送本地時(shí)間成功!n);closesocket(sock);wsacleanup();return 0;2、 客戶端:#pragma comment(lib,ws2_32.lib)#include#include#include#include int main()

14、 int m;dowsadata wsadata;int err = wsastartup(winsock_version,&wsadata);printf(-網(wǎng)絡(luò)對(duì)時(shí)服務(wù)系統(tǒng)歡迎您(通信092班 陳劍鋒)-nn);if(err != 0)printf(wsastartup() 出錯(cuò):%dn,wsagetlasterror();return -1;socket sock = socket(af_inet,sock_stream,0);if(sock = invalid_socket)printf(socket()出錯(cuò):%dn,wsagetlasterror();wsacleanup();ret

15、urn -1;sockaddr_in serveraddr;serveraddr.sin_family = af_inet;serveraddr.sin_port = htons(20000);serveraddr.sin_addr.s_un.s_addr = inet_addr(127.0.0.1);err=connect(sock,(sockaddr *)&serveraddr,sizeof(serveraddr);if(err = socket_error)printf(connect()出錯(cuò):%dn,wsagetlasterror();closesocket(sock);wsaclea

16、nup();return -1;char data = 客戶端請(qǐng)求時(shí)間同步!;int sb = send(sock,data,strlen(data),0);if(sb = socket_error)printf(send()出錯(cuò):%dn,wsagetlasterror();closesocket(sock);wsacleanup();return -1;printf(已經(jīng)發(fā)送請(qǐng)求給服務(wù)器 %sn,data,inet_ntoa(serveraddr.sin_addr);shutdown(sock,sd_send);systemtime st,sp;getlocaltime(&sp); prin

17、tf(本地時(shí)間為:%04d-%02d-%02d%.2d:%.2d:%.2d n,sp.wyear,sp.wmonth,sp.wday,sp.whour,sp.wminute,sp.wsecond);while(1)/memset(rbuf,0,1024);int rb =recv(sock,(char *)&st,sizeof(st),0);if(rb = socket_error)printf(recv()出錯(cuò):%dn,wsagetlasterror();closesocket(sock);wsacleanup();return -1;if(rb=0)printf(connection is

18、 closed.nn);shutdown(sock,sd_send);closesocket(sock);break;printf(獲取的服務(wù)器時(shí)間為:%04d-%02d-%02d %.2d:%.2d:%.2d n, st.wyear,st.wmonth,st.wday,st.whour, st.wminute, st.wsecond);setlocaltime(&st);printf(修改本地時(shí)間成功,已與%s時(shí)間同步!nn,inet_ntoa(serveraddr.sin_addr);printf(繼續(xù)請(qǐng)按(1),退出請(qǐng)按(0)n);scanf(%d,&m);while(m=1);3、 程序運(yùn)行結(jié)果:a、客戶端向服務(wù)器發(fā)送對(duì)時(shí)請(qǐng)求,若服務(wù)器還沒有打開,則客戶端顯示如下:b、服務(wù)器打開運(yùn)行之后,等待客戶端的對(duì)時(shí)請(qǐng)求,服務(wù)器顯示如下:c、服務(wù)器打開運(yùn)行之后,接受客戶端的對(duì)時(shí)請(qǐng)求,服務(wù)器顯示如下:d、服務(wù)器應(yīng)答后客戶端顯示如下:e、按(1)刷新時(shí)間,服務(wù)器與客戶端顯示如下:六、心得體會(huì)通過本次課程設(shè)計(jì),加深了對(duì)網(wǎng)絡(luò)程序課程知識(shí)的認(rèn)知,進(jìn)一步鞏固了課堂上所學(xué)習(xí)的理論知識(shí),也可以加強(qiáng)自己的實(shí)踐操作,提

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論