計算機網(wǎng)絡(luò)課程設(shè)計——計本091班李志紅(0918014009)_第1頁
計算機網(wǎng)絡(luò)課程設(shè)計——計本091班李志紅(0918014009)_第2頁
計算機網(wǎng)絡(luò)課程設(shè)計——計本091班李志紅(0918014009)_第3頁
計算機網(wǎng)絡(luò)課程設(shè)計——計本091班李志紅(0918014009)_第4頁
計算機網(wǎng)絡(luò)課程設(shè)計——計本091班李志紅(0918014009)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計iii課程設(shè)計設(shè)計說明書udp協(xié)議中的sendto調(diào)用學(xué)生姓名李志紅學(xué)號0918014009班級計本091成績指導(dǎo)教師李娜計算機科學(xué)與技術(shù)系2012年1 月 11 日計算機網(wǎng)絡(luò)原理課程設(shè)計評閱書題 目udp協(xié)議中的sendto調(diào)用學(xué)生姓名李志紅學(xué)號0918014009指導(dǎo)教師評語及成績成績: 教師簽名: 年 月 日答辯教師評語及成績成績: 教師簽名: 年 月 日教研室意見總成績: 室主任簽名: 年 月 日注:指導(dǎo)教師成績60%,答辯成績40%,總成績合成后按五級制記入。課程設(shè)計任務(wù)書2011 2012 學(xué)年第 一 學(xué)期專業(yè): 計算機科學(xué)與技術(shù) 學(xué)號: 0918014009 姓名: 李志

2、紅 課程設(shè)計名稱: 課程設(shè)計 iii課程設(shè)計 設(shè)計題目: udp協(xié)議中的sendto調(diào)用 完成期限:自 2012 年 1 月 2 日至 2012 年 1 月 13 日共 2 周設(shè)計依據(jù)、要求及主要內(nèi)容(可另加附頁): 操作內(nèi)容:掌握udp協(xié)議中的send to調(diào)用。從應(yīng)用程序開發(fā)的角度出發(fā),熟悉網(wǎng)絡(luò)編程模式與編程接口,重點掌握基于tcp和udp的套接字編程技術(shù),最后了解tcp/ip協(xié)議的工作原理及關(guān)特性。操作環(huán)境:硬件包括pc機一臺,要求聯(lián)網(wǎng)。軟件包括windows xp操作系統(tǒng),windows socket,vc+6.0等等。指導(dǎo)教師(簽字): 教研室主任(簽字): 批準日期: 2012年

3、1 月 11 日摘要 udp協(xié)議 是user datagram protocol的簡稱, 中文名是用戶數(shù)據(jù)包協(xié)議,是 osi 參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù)。udp協(xié)議的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)包的形式。一個典型的數(shù)據(jù)包就是一個二進制數(shù)據(jù)的傳輸單位。每一個數(shù)據(jù)包的前8個字節(jié)用來包含報頭信息,剩余字節(jié)則用來包含具體的傳輸數(shù)據(jù)。udp傳輸?shù)暮锰幘褪撬俣瓤欤瞧浒踩缘?。程序基于vc+6.0環(huán)境開發(fā)實現(xiàn)。關(guān)鍵詞:udp協(xié)議;傳輸;vc+目錄1 課題描述12 問題分析和任務(wù)定義23 邏輯設(shè)計34詳細設(shè)計44.1具體步驟44.2程序操作說明45 程序編

4、碼65.1服務(wù)器程序代碼65.2客戶端程序代碼87 總結(jié)15參考文獻161 課題描述 udp(user data protocol,用戶數(shù)據(jù)報協(xié)議)是與tcp相對應(yīng)的協(xié)議。它是面向非連接的協(xié)議,它不與對方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過去! udp適用于一次只傳送少量數(shù)據(jù)、對可靠性要求不高的應(yīng)用環(huán)境。比如,我們經(jīng)常使用“ping”命令來測試兩臺主機之間tcp/ip通信是否正常,其實“ping”命令的原理就是向?qū)Ψ街鳈C發(fā)送udp數(shù)據(jù)包,然后對方主機確認收到數(shù)據(jù)包,如果數(shù)據(jù)包是否到達的消息及時反饋回來,那么網(wǎng)絡(luò)就是通的。例如,在默認狀態(tài)下,一次“ping”操作發(fā)送4個數(shù)據(jù)包??梢钥吹剑l(fā)送的數(shù)據(jù)

5、包數(shù)量是4包,收到的也是4包(因為對方主機收到后會發(fā)回一個確認收到的數(shù)據(jù)包)。這充分說明了udp協(xié)議是面向非連接的協(xié)議,沒有建立連接的過程。正因為udp協(xié)議沒有連接的過程,所以它的通信效果高;但也正因為如此,它的可靠性不如tcp協(xié)議高。2 問題分析和任務(wù)定義用戶數(shù)據(jù)報協(xié)議udp(user data protocol)是 osi 參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù)。udp 協(xié)議基本上是 ip 協(xié)議與上層協(xié)議的接口。udp 協(xié)議適用端口分別運行在同一臺設(shè)備上的多個應(yīng)用程序。它是面向非連接的協(xié)議,它不與對方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過去。本文主要利用vc+和

6、基于winsock的網(wǎng)絡(luò)編程,編寫了一個基于udp協(xié)議的傳輸測試實例,實現(xiàn)了udp協(xié)議的通信過程。3 邏輯設(shè)計設(shè)計udp服務(wù)器的過程如下所示,首先,創(chuàng)建一個socket并監(jiān)聽事件,然后啟動線程接收數(shù)據(jù),用一個鏈表保存所有連上的客戶,并通知連接成功,這樣,客戶就有機會處理這一事件并作一些動作,最后,當客戶斷開時,向服務(wù)器發(fā)送一個事件,服務(wù)器就可以做一些收尾的工作。 依據(jù)問題分析所得到的結(jié)果,畫出完成本程序的思路框架圖。如圖3.1所示: 圖3.1程序設(shè)計流程圖4詳細設(shè)計4.1具體步驟服務(wù)器一端的工作流程如下:1.打開通信通道,通知本地主機在某一保留端口接收客戶機請求到達指定端口。2.等待客戶請求到

7、達指定端口。3.接收到請求,啟動一個新進程處理用戶請求,同時釋放舊進程以響應(yīng)新的客戶請求,一旦服務(wù)完成,關(guān)閉新進程與客戶的通信鏈路。4.繼續(xù)等待客戶機請求。5.如果不想響應(yīng)客戶機的請求,關(guān)閉服務(wù)器進程??蛻魴C一端工作的流程如下: 1.打開通信信道,并連接到服務(wù)器在主機的保留端口,該端口對應(yīng)的服務(wù)器的udp進程。 2.向服務(wù)器發(fā)出請求報文,等待接收應(yīng)答。 3.從服務(wù)器方收到的最終應(yīng)答結(jié)果,或在不再請求時關(guān)閉信道并終止客戶進程。4.2程序操作說明1.socket pascal far socket(int af,int type,int procotol);/創(chuàng)建套接字socket()2.int

8、pascal far bind(socket s,const struct sockaddr far * name,int namelen);/指定本地地址bind()3.int pascal far connect(socket s,const struct sockaddr far * name,int namelen);socket pascal far accept(socket s,struct sockaddr far * name,int far * addrlen);/建立套接字連接connect()和accept()4.int pascal far listen(socket

9、 s, int backlog);/監(jiān)聽連接listen()5.int pascal far send(socket s,const char far * buf,int len,int flags);/數(shù)據(jù)傳輸send()6.int pascal far select(int nfds,fd_set far * readfds,fd_set far * writefds, fd_set far * exceptfds,const struct timeval far * timeout);/多路復(fù)用select()7.bool pascal far closesocket(socket s)

10、; /關(guān)閉套接字closesocket()本程序具體操作流程圖如圖4.1所示: 圖4.1程序操作流程圖5 程序編碼5.1服務(wù)器程序代碼#include iostream#include #pragma comment(lib,ws2_32.lib)using namespace std;#define const_buflength 1024#define const_port 12345bool initsocket(void);wsadata wsadata;socket m_socket;sockaddr_in seradd,cliadd;int main()if(!initsocket

11、()cout套接字初始化出錯,即將退出endl;wsacleanup();system(pause);return -1;int ilength=sizeof(cliadd);int retval;char strsendmsgconst_buflength;char strrecvmsgconst_buflength;while(1)cout等待客戶端回應(yīng)endl;memset(strrecvmsg,0,sizeof(strrecvmsg);retval=recvfrom(m_socket,strrecvmsg,const_buflength,0,(sockaddr*)&cliadd,&il

12、ength)if(retval=socket_error)cout接受失敗,錯誤id為:wsagetlasterror()endl;break;else if(retval=0)break;elsecoutip:porttinet_ntoa(cliadd.sin_addr):ntohs(cliadd.sin_port)tstrrecvmsgendl;memset(strsendmsg,0,sizeof(strsendmsg);cout收到客戶消息,直接轉(zhuǎn)發(fā)消息strsendmsg;if(strcmp(strsendmsg,exit)=0)strcpy(strsendmsg,收到客戶下線的消息,

13、我是服務(wù)器,我也下線了);retval=sendto(m_socket,strsendmsg,sizeof(strsendmsg),0,(sockaddr*)&cliadd,sizeof(cliadd);closesocket(m_socket);wsacleanup();return 0;retval=sendto(m_socket,strsendmsg,sizeof(strsendmsg),0,(sockaddr*)&cliadd,sizeof(cliadd);if(retval=socket_error)cout發(fā)送失敗,錯誤id為:wsagetlasterror()endl;break

14、;else if(retval=0)break;elsecout發(fā)送成功!endl;closesocket(m_socket);wsacleanup();return 0;bool initsocket(void)if(wsastartup(makeword(2,2),&wsadata)!=0)cout加載winsock失敗,錯誤id為:wsagetlasterror()endl;exit(0);m_socket=socket(af_inet,sock_dgram,0);if(invalid_socket=m_socket)cout套接字創(chuàng)建失敗!錯誤id為:wsagetlasterror()

15、endl;return false;seradd.sin_family=af_inet;seradd.sin_port=htons(const_port);seradd.sin_addr.s_un.s_addr=htonl(inaddr_any);int retval;retval=bind(m_socket,(sockaddr*)&seradd,sizeof(sockaddr);if(socket_error=retval)closesocket(m_socket);cout端口綁定失敗! 錯誤id為:wsagetlasterror()endl;return false;return tru

16、e;5.2客戶端程序代碼#include iostream#include winsock2.h#pragma comment(lib,ws2_32.lib)using namespace std;#define const_buflength 1024#define const_port 12345bool initsocket(void);wsadata wsadata;socket m_socket;sockaddr_in seradd,cliadd;int main()if(!initsocket()cout套接字初始化出錯,即將退出endl;wsacleanup();system(p

17、ause);return -1;int ilength=sizeof(seradd);int retval;char strsendmsgconst_buflength;char strrecvmsgconst_buflength;while(1)memset(strsendmsg,0,sizeof(strsendmsg);cout請輸入要發(fā)送的:strsendmsg;if(strcmp(strsendmsg,exit)=0)strcpy(strsendmsg,我是客戶端,我要下線了);retval=sendto(m_socket,strsendmsg,sizeof(strsendmsg),0

18、,(sockaddr*)&seradd,sizeof(cliadd);closesocket(m_socket);wsacleanup();return 0;retval=sendto(m_socket,strsendmsg,sizeof(strsendmsg),0,(sockaddr*)&seradd,sizeof(cliadd);if(retval=socket_error)cout發(fā)送失敗,錯誤id為:wsagetlasterror()endl;cout程序出錯,即將退出endl;break;else if(retval=0)break;elsecout發(fā)送成功!endl;cout等待服

19、務(wù)器回應(yīng)endl;memset(strrecvmsg,0,sizeof(strrecvmsg);retval=recvfrom(m_socket,strrecvmsg,const_buflength,0,(sockaddr*)&seradd,&ilength)if(retval=socket_error)cout接受失敗,錯誤id為:wsagetlasterror()endl;cout程序出錯,即將退出endl;break;else if(retval=0)return 0;elsecoutip:porttinet_ntoa(cliadd.sin_addr):ntohs(cliadd.sin_

20、port)tstrrecvmsgendl;closesocket(m_socket);wsacleanup();return 0;bool initsocket(void)if(wsastartup(makeword(2,2),&wsadata)!=0)cout加載winsock失敗,錯誤id為:wsagetlasterror()endl;return false;m_socket=socket(af_inet,sock_dgram,0);if(invalid_socket=m_socket)cout套接字創(chuàng)建失?。″e誤id為:wsagetlasterror()endl;return fals

21、e;seradd.sin_family=af_inet;seradd.sin_port=htons(const_port);seradd.sin_addr.s_un.s_addr=inet_addr();return true;6.程序調(diào)試與測試 首先初始化成功后,先在服務(wù)器下運行服務(wù)器的程序結(jié)果如圖6.1所示:圖6.1服務(wù)器運行結(jié)果顯示截圖再在客戶端運行客戶端程序結(jié)果如圖6.2所示:圖6.2客戶端運行結(jié)果顯示截圖代碼調(diào)試成功后,客戶端先發(fā)送消息如圖6.3所示:圖6.3客戶端發(fā)送消息顯示截圖 服務(wù)器接受到消息結(jié)果如圖6.4所示:圖6.4服務(wù)器接收消息顯示截圖服務(wù)器發(fā)送消息結(jié)果

22、如圖6.5所示:圖6.5服務(wù)器發(fā)送消息顯示截圖客戶端收到消息,并輸入“byebye”,客戶端退出談話結(jié)果如圖6.6所示: 圖6.6客戶端退出顯示截圖服務(wù)器收到消息,對話結(jié)束結(jié)果如圖6.7所示:圖6.7服務(wù)器下線顯示截圖7 總結(jié) 在為期近兩周的課程設(shè)計中,我體會頗多,學(xué)到了很多東西。我加強了對c+語言這門課程的認識,并且復(fù)習(xí)了自己以前學(xué)習(xí)到的知識,這些都使我對計算機語言的學(xué)習(xí)有了更深入地認識。通過這次的課程設(shè)計,我收獲很大,相信會為自己以后的學(xué)習(xí)帶來很大的好處。課程設(shè)計中的許多問題并不是我們平時只靠課本就可以輕易解決的,所以鍛煉了我們學(xué)會用已掌握的知識去解決具體問題的能力。這次課程設(shè)計讓我充分認

23、識到了自己的不足,認識到了動手能力的重要性。我會在以后的學(xué)習(xí)中更加努力鍛煉自己,提高自己,讓自己寫出更好的程序,為以后的編程打好基礎(chǔ)。參考文獻1譚浩強.c+程序設(shè)計m.北京.:清華教育出版社,2004.2錢能.c+程序設(shè)計教程,北京:清華大學(xué)出版社,2005.3 謝希仁.計算機網(wǎng)絡(luò)(第五版).北京.電子工業(yè)出版社.2011 蒄蚈腿蒀薆袃肅葿蚈蚆羈蒈莈袁袇肅薀蚄袃肄螞羀膂肅莂螃肈肂蒄羈羄肁薇螁袀膁蠆薄腿膀荿蝿肅腿蒁薂肁膈蚃螇羇膇莃蝕袃膆蒅袆膁膆薈蚈肇膅蝕襖羃芄莀蚇衿芃蒂袂螅節(jié)薄蚅膄芁莄袁肀芀蒆螃羆芀薈罿袂艿蟻螂膀羋莀薄肆莇蒃螀羂莆薅薃袈蒞芅螈螄莄蕆薁膃莄蕿袇聿莃螞蠆羅莂莁裊袁莁蒄蚈腿蒀薆袃肅葿蚈

24、蚆羈蒈莈袁袇肅薀蚄袃肄螞羀膂肅莂螃肈肂蒄羈羄肁薇螁袀膁蠆薄腿膀荿蝿肅腿蒁薂肁膈蚃螇羇膇莃蝕袃膆蒅袆膁膆薈蚈肇膅蝕襖羃芄莀蚇衿芃蒂袂螅節(jié)薄蚅膄芁莄袁肀芀蒆螃羆芀薈罿袂艿蟻螂膀羋莀薄肆莇蒃螀羂莆薅薃袈蒞芅螈螄莄蕆薁膃莄蕿袇聿莃螞蠆羅莂莁裊袁莁蒄蚈腿蒀薆袃肅葿蚈蚆羈蒈莈袁袇肅薀蚄袃肄螞羀膂肅莂螃肈肂蒄羈羄肁薇螁袀膁蠆薄腿膀荿蝿肅腿蒁薂肁膈蚃螇羇膇莃蝕袃膆蒅袆膁膆薈蚈肇膅蝕襖羃芄莀蚇衿芃蒂袂螅節(jié)薄蚅膄芁莄袁肀芀蒆螃羆芀薈罿袂艿蟻螂膀羋莀薄肆莇蒃螀羂莆薅薃袈蒞芅螈螄莄蕆薁膃莄蕿袇聿莃螞蠆羅莂莁裊袁莁蒄蚈腿蒀薆袃肅葿蚈蚆羈蒈莈袁袇肅薀蚄袃肄螞羀膂肅莂螃肈肂蒄羈羄肁薇螁袀膁蠆薄腿膀荿蝿肅腿蒁薂肁膈蚃螇羇膇莃

25、蝕袃膆蒅袆膁膆薈蚈肇膅蝕襖羃芄莀蚇衿芃蒂袂螅節(jié)薄蚅膄芁莄袁肀芀蒆螃羆芀薈罿袂艿蟻螂膀羋莀薄肆莇蒃螀羂莆薅薃袈蒞芅螈螄莄蕆薁膃莄蕿袇聿莃螞蠆羅莂莁裊袁莁蒄蚈腿蒀薆袃肅葿蚈蚆羈蒈莈袁袇肅薀蚄袃肄螞羀膂肅莂螃肈肂蒄羈羄肁薇螁袀膁蠆薄腿膀荿蝿肅腿蒁薂肁膈蚃螇羇膇莃蝕袃膆蒅袆膁膆薈蚈肇膅蝕襖羃芄莀蚇衿芃蒂袂螅節(jié)薄蚅膄芁莄袁肀芀蒆螃羆芀薈罿袂艿蟻螂膀羋莀薄肆莇蒃螀羂莆薅薃袈蒞芅螈螄莄蕆薁膃莄蕿袇聿莃螞蠆羅莂莁裊袁莁蒄蚈腿蒀薆袃肅葿蚈蚆羈蒈莈袁袇肅薀蚄袃肄螞羀膂肅莂螃肈肂蒄羈羄肁薇螁袀膁蠆薄腿膀荿蝿肅腿蒁薂肁膈蚃螇羇膇莃蝕袃膆蒅袆膁膆薈蚈肇膅蝕襖羃芄莀蚇衿芃蒂袂螅節(jié)薄蚅膄芁莄袁肀芀蒆螃羆芀薈罿袂艿蟻螂膀羋莀

26、薄肆莇蒃螀羂莆薅薃袈蒞芅螈螄莄蕆薁膃莄蕿袇聿莃螞蠆羅莂莁裊袁莁蒄蚈腿蒀薆袃肅葿蚈蚆羈蒈莈袁袇肅薀蚄袃肄螞羀膂肅莂螃肈肂蒄羈羄肁薇螁袀膁蠆薄腿膀荿蝿肅腿蒁薂肁膈蚃螇羇膇莃蝕袃膆蒅袆膁膆薈蚈肇膅蝕襖羃芄莀蚇衿芃蒂袂螅節(jié)薄蚅膄芁莄袁肀芀蒆螃羆芀薈罿袂艿蟻螂膀羋莀薄肆莇蒃螀羂莆薅薃袈蒞芅螈螄莄蕆薁膃莄蕿袇聿莃螞蠆羅莂莁裊袁莁蒄蚈腿蒀薆袃肅葿蚈蚆羈蒈莈袁袇肅薀蚄袃肄螞羀膂肅莂螃肈肂蒄羈羄肁薇螁袀膁蠆薄腿膀荿蝿肅腿蒁薂肁膈蚃螇羇膇莃蝕袃膆蒅袆膁膆薈蚈肇膅蝕襖羃芄莀蚇衿芃蒂袂螅節(jié)薄蚅膄芁莄袁肀芀蒆螃羆芀薈罿袂艿蟻螂膀羋莀薄肆莇蒃螀羂莆薅薃袈蒞芅螈螄莄蕆薁膃莄蕿袇聿莃螞蠆羅莂莁裊袁莁蒄蚈腿蒀薆袃肅葿蚈蚆羈蒈莈袁袇肅薀蚄袃肄螞羀膂肅莂螃肈肂蒄羈羄肁薇螁袀膁蠆薄腿膀荿蝿肅腿蒁薂肁膈蚃螇羇膇莃蝕袃膆蒅袆膁膆薈蚈肇膅蝕襖羃芄莀蚇衿芃蒂袂螅節(jié)薄蚅膄芁莄袁肀芀蒆螃羆芀薈罿袂艿蟻螂膀羋莀薄肆莇蒃螀羂莆薅薃袈蒞芅

溫馨提示

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

評論

0/150

提交評論