版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
JHJFHKSHFJDHFJKHSKDJHFJKHKFJHDSJKHJKHKJDSFHJKHJDHFJKSHFJKDHFKHFHDKSHFKLHFJKDHFJKSHJKDFHDJKHFJKDHFJKDSFHJKDSFHJKS基于UDP協(xié)議的網(wǎng)絡(luò)聊天程序設(shè)計學(xué)生姓名:XX指導(dǎo)老師:XX摘要本課程設(shè)計是是基于UDP協(xié)議的網(wǎng)絡(luò)聊天程序設(shè)計,UDP協(xié)議是無連接的協(xié)議,是TCP/IP協(xié)議的一種分層協(xié)議。通過本設(shè)計進一步掌握利用VisualC++進行程序設(shè)計的能力和運用面向?qū)ο蟪绦蛟O(shè)計的思想和方法,初步掌握開發(fā)一個小型實用系統(tǒng)的基本方法,理解Windows程序的運行過程。本設(shè)計實現(xiàn)的聊天工具要求在MicrosoftVisualC++6.0上,編寫一個程序,采用C/S模式,模擬網(wǎng)絡(luò)上的聊天軟件,實現(xiàn)在局域網(wǎng)上兩臺主機之間的通信。且經(jīng)過測試,該聊天程序能夠正常運行,實現(xiàn)了設(shè)計目標(biāo)。關(guān)鍵詞UDP協(xié)議;客戶機/服務(wù)器;網(wǎng)絡(luò)聊天1引言現(xiàn)在是網(wǎng)絡(luò)的世界,網(wǎng)絡(luò)發(fā)展的不可估量了,它可以包括我們生活中的方方面面,小到上網(wǎng)瀏覽新聞、上網(wǎng)購物,大到網(wǎng)上理財、網(wǎng)上會議,可以說網(wǎng)絡(luò)把我們的世界變小了,即使在海角天邊,只要有網(wǎng)絡(luò)的地方我們就可以隨時聯(lián)系。最簡單的形式就是進行網(wǎng)絡(luò)聊天了,比如QQ、MSN等等很簡單的聊天工具,可以隨時拉近你我的距離。本設(shè)計將基于UDP協(xié)議和局域網(wǎng)環(huán)境,實現(xiàn)一個即時聊天程序。1.1本文主要內(nèi)容本文第二節(jié)介紹了UDP協(xié)議和客戶機/服務(wù)器模式基本原理,第三節(jié)詳細描述了設(shè)計思路和流程,第四節(jié)為本次課程設(shè)計的總結(jié)。1.2設(shè)計平臺MicrosoftVisualC++6.0,簡稱VC或者VC6.0,是微軟推出的一款C++編譯器,將“高級語言”翻譯為“機器語言(低級語言)”的程序。VisualC++是一個功能強大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出VisualC++1.0后,隨著其新版本的不斷問世,VisualC++已成為專業(yè)程序員進行軟件開發(fā)的首選工具。雖然微軟公司推出了VisualC++.NET(VisualC++7.0),但它的應(yīng)用有很大的局限性,只適用于Windows2000、WindowsXP和WindowsNT4.0。所以實際中,更多的是以VisualC++6.0為平臺。VisualC++6.0由Microsoft開發(fā),它不僅是一個C++編譯器,而且是一個基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrateddevelopmentenvironment,IDE)。VisualC++6.0由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類向?qū)lassWizard等開發(fā)工具。這些組件通過一個名為DeveloperStudio的組件集成為和諧的開發(fā)環(huán)境。Microsoft的主力軟件產(chǎn)品。VisualC++是一個功能強大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出VisualC++1.0后,隨著其新版本的不斷問世,VisualC++已成為專業(yè)程序員進行軟件開發(fā)的首選工具。雖然微軟公司推出了VisualC++.NET(VisualC++7.0),但它的應(yīng)用的很大的局限性,只適用于Windows2000,WindowsXP和WindowsNT4.0。所以實際中,更多的是以VisualC++6.0為平臺。2設(shè)計原理2.1UDP協(xié)議原理UDP協(xié)議的全稱是用戶數(shù)據(jù)報協(xié)議,在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理數(shù)據(jù)包,是一種無連接的協(xié)議。在OSI模型中,在第四層——傳輸層,處于IP協(xié)議的上一層。UDP有不提供數(shù)據(jù)包分組、組裝和不能對數(shù)據(jù)包進行排序的缺點,也就是說,當(dāng)報文發(fā)送之后,是無法得知其是否安全完整到達的。UDP用來支持那些需要在計算機之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。包括網(wǎng)絡(luò)視頻會議系統(tǒng)在內(nèi)的眾多的客戶/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用都需要使用UDP協(xié)議。UDP協(xié)議從問世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天UDP仍然不失為一項非常實用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。UDP是OSI參考模型中一種無連接的傳輸層協(xié)議,它主要用于不要求分組順序到達的傳輸中,分組傳輸順序的檢查與排序由應(yīng)用層完成,提供面向事務(wù)的簡單不可靠信息傳送服務(wù)。UDP協(xié)議基本上是IP協(xié)議與上層協(xié)議的接口。UDP協(xié)議適用端口分別運行在同一臺設(shè)備上的多個應(yīng)用程序。與所熟知的TCP(傳輸控制協(xié)議)協(xié)議一樣,UDP協(xié)議直接位于IP(網(wǎng)際協(xié)議)協(xié)議的頂層。根據(jù)OSI(開放系統(tǒng)互連)參考模型,UDP和TCP都屬于傳輸層協(xié)議。UDP協(xié)議的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)包的形式。一個典型的數(shù)據(jù)包就是一個二進制數(shù)據(jù)的傳輸單位。每一個數(shù)據(jù)包的前8個字節(jié)用來包含報頭信息,剩余字節(jié)則用來包含具體的傳輸數(shù)據(jù)。UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接(當(dāng)然發(fā)送數(shù)據(jù)結(jié)束時也沒有連接可釋放)因此減少了開銷和發(fā)送數(shù)據(jù)之前的時延。UDP使用的是盡最大努力交付,即不保證可靠交付,因此主機不需要維持復(fù)雜的連接狀態(tài)表。UDP是面向報文的。發(fā)送方的UDP對應(yīng)程序交下來的報文,在添加首部后就向下交付給IP層。UDP對應(yīng)用層交下來的報文,既不合并,也不拆分,而是保留這些報文的邊界。UDP是定義用來在互連網(wǎng)絡(luò)環(huán)境中提供數(shù)據(jù)報交換的計算機通信的協(xié)議。此協(xié)議默認(rèn)是IP下層協(xié)議。此協(xié)議提供了向另一用戶程序發(fā)送信息的最簡便的協(xié)議機制,不需要連接確認(rèn)和保護復(fù)制,所以在軟件實現(xiàn)上比較簡單,需要的內(nèi)存空間比起TCP相對較小。UDP包頭由4個域組成,其中每個域各占用2個字節(jié)。(1)源端口號(16位):UDP數(shù)據(jù)包的發(fā)送方使用的端口號。(2)目標(biāo)端口號(16位):UDP數(shù)據(jù)包的接收方使用的端口號。UDP協(xié)議使用端口號為不同的應(yīng)用保留其各自的數(shù)據(jù)傳輸通道。UDP和rap協(xié)議正是采用這一機制,實現(xiàn)對同一時刻內(nèi)多項應(yīng)用同時發(fā)送和接收數(shù)據(jù)的支持。(3)數(shù)據(jù)報長度(16位)。數(shù)據(jù)報的長度是指包括報頭和數(shù)據(jù)部分在內(nèi)的總的字節(jié)數(shù)。理論上,包含報頭在內(nèi)的數(shù)據(jù)包的最大長度為65535字節(jié)。不過,一些實際應(yīng)用往往會限制數(shù)據(jù)包的大小,有時會降低到8192字節(jié)。(4)校驗值(16位)。UDP協(xié)議使用包頭中的校驗值來保證數(shù)據(jù)的安全。2.2客戶機/服務(wù)器模式
由于這次課程設(shè)計是實現(xiàn)點到點的可靠連接,所以在此使用UDP連接方式。在這個連接中,雙方分為客戶和服務(wù)器,他們各自的功能不同??蛻魴C一方,UDP應(yīng)用程序功能如下:(1)打開通信信道(申請一套接字),并連接到服務(wù)器在主機的保留端口,該端口對應(yīng)服務(wù)器的UDP進程。(2)向服務(wù)器發(fā)出請求報文,等待接收應(yīng)答。(3)從服務(wù)器方收到最終應(yīng)答結(jié)果,或在不再請求時關(guān)閉信道并終止客戶機進程。服務(wù)器一方,UDP應(yīng)用程序動作如下:(1)打開通信信道(申請一套接字),通知本地主機在某一保留端口接收客戶機請求。(2)等待客戶請求到達指定端口。(3)接收到請求,啟動一新進程處理用戶請求,同時釋放舊進程以響應(yīng)新的客戶請求,一旦服務(wù)完成,關(guān)閉新進程與客戶的通信鏈路。(4)繼續(xù)等待客戶機請求。(5)如果不想響應(yīng)客戶機請求,關(guān)閉服務(wù)器進程。3設(shè)計步驟3.1總體設(shè)計思路基于UDP協(xié)議通信和基于TCP協(xié)議的通信不同,基于UDP的消息傳遞更快,但不提供可靠性的保證。也就是說,數(shù)據(jù)在傳遞的時候,用戶無法知道數(shù)據(jù)能否正確的到達目的地主機,也不能確定數(shù)據(jù)到達目的地的順尋是否和發(fā)送的順序相同。系統(tǒng)采用的是客戶端/服務(wù)器工作模式,所以應(yīng)有客戶端和服務(wù)器兩個類,其中客戶端向服務(wù)器請求服務(wù)。而基于UDP通信的基本模式是:將數(shù)據(jù)打包,稱為數(shù)據(jù)包,然后將數(shù)據(jù)包發(fā)往目的地。接受別人發(fā)來的數(shù)據(jù)包,然后查看數(shù)據(jù)包的內(nèi)容。3.2功能模塊調(diào)用流程設(shè)計:客戶端服務(wù)器客戶端服務(wù)器Socket()Socket()Socket()Socket()Bind()Bind()Bind()Bind()雙向通信雙向通信ReceiveFrom()/SendTo()ReceiveFrom()/SendTo()ReceiveFrom()/SendTo()Close()Close()Close()Close()圖3.1程序設(shè)計流程圖其中,服務(wù)器端:Socket(),建立流式套接字;Bind(),將套接字和服務(wù)器地址結(jié)構(gòu)綁定;ReceiveFrom()/SendTo(),在套接字上接收/發(fā)送數(shù)據(jù);Close(),關(guān)閉套接字??蛻舳伺c服務(wù)器端同理。3.3基于UDP的網(wǎng)絡(luò)聊天程序?qū)崿F(xiàn)3.3.1基于UDP的聊天程序服務(wù)器端源程序://創(chuàng)建套接字//第二個參數(shù)和TCP設(shè)置不同SOCKETsockSrv=socket(AF_INET,SOCK_DGRAM,0);SOCKADDR_INaddrSrv;//設(shè)置服務(wù)器端套接字的地址結(jié)構(gòu)的相關(guān)屬性addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//設(shè)置IPaddrSrv.sin_port=htons(20000);////設(shè)置端口號addrSrv.sin_family=AF_INET;//將套接字和服務(wù)器地址結(jié)構(gòu)綁定bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));charrecvBuf[100];charsendBuf[100];chartempBuf[100];SOCKADDR_INaddrClient;intlen=sizeof(SOCKADDR);//從客戶端接收數(shù)據(jù)recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);if('q'==recvBuf[0]){sendto(sockSrv,"q",strlen("q")+1,0,(SOCKADDR*)&addrClient,len);cout<<"chartend"<<endl;break;//退出循環(huán)}//將對方發(fā)送過來的信息前段加上IP地址進行輸出sprintf(tempBuf,"%ssay%s\n",inet_ntoa(addrClient.sin_addr),recvBuf);cout<<tempBuf<<endl;//將用戶的鍵盤輸入發(fā)送到對方cout<<"Pleaseinputmessage:"<<endl;gets(sendBuf);sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len);3.3.2基于UDP的聊天程序客戶端端源程序://創(chuàng)建套接字SOCKETsockClient=socket(AF_INET,SOCK_DGRAM,0);//第二個參數(shù)和TCP設(shè)置不同SOCKADDR_INaddrSrv;//服務(wù)器地址結(jié)構(gòu)addrSrv.sin_addr.S_un.S_addr=inet_addr("");//服務(wù)器地址addrSrv.sin_port=htons(20000);//服務(wù)器端口號addrSrv.sin_family=AF_INET;cout<<"請輸入發(fā)送的消息:"<<endl;gets(sendBuf);//得到用戶的鍵盤輸入//將對方發(fā)送過來的信息前段加上IP地址進行輸出sprintf(tempBuf,"%ssay%s\n",inet_ntoa(addrSrv.sin_addr),recvBuf);cout<<tempBuf<<endl;3.4程序測試結(jié)果圖3.2客戶端向服務(wù)器發(fā)送信息圖3.3服務(wù)器收到信息圖3.4服務(wù)器向客戶端發(fā)送信息圖3.5客戶端收到服務(wù)器信息4結(jié)束語這次計算機網(wǎng)絡(luò)課程設(shè)計歷時兩個星期,讓我學(xué)到了很多很多的東西。不僅鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。當(dāng)然,在這個過程中我也遇到了很多問題,不過由于老師耐心的幫助和講解,使我更進一步加深了對計算機網(wǎng)絡(luò)的了解,讓我對它有了更加濃厚的興趣。特別是當(dāng)每一步成功時,心里特別的開心??偟膩碚f,這次設(shè)計的基于UDP協(xié)議的網(wǎng)絡(luò)聊天程序還是比較成功的,在設(shè)計中遇到了很多問題,最后在老師的辛勤指導(dǎo)下,終于迎刃而解,有點小小的成就感,終于覺得平時所學(xué)的知識有了實用的價值,達到了理論與實際相結(jié)合的目的,不僅學(xué)到了不少知識,而且鍛煉了自己的能力,使自己對以后的路有了更加清楚的認(rèn)識,同時,對未來有了更多的信心。最后,對給過我?guī)椭乃型瑢W(xué)和各位指導(dǎo)老師再次表示忠心的感謝!參考文獻[1]謝希仁.計算機網(wǎng)絡(luò)(第四版)[M].北京:電子工業(yè)出版社,2003[2]陸魁軍等.計算機網(wǎng)絡(luò)基礎(chǔ)實踐教程[M].北京:清華大學(xué)出版社,2005[3]陳堅、陳偉編著.《VisualC++網(wǎng)絡(luò)高級編程》.北京:人民郵電出版社,2001[4]吳功宜、胡曉英等編著.《計算機網(wǎng)絡(luò)課程設(shè)計》.北京:機械工業(yè)出版社,2010.8附件1:首先編寫服務(wù)器端程序,實現(xiàn)代碼如下:ChatServer#include<iostream>#include<WinSock2.h>#pragmacomment(lib,"Ws2_32.lib")usingnamespacestd;intmain(intargc,CHAR*argv[]){WORDwVersionRequested;WSADATAwsaData;interr;wVersionRequested=MAKEWORD(2,0);err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){cout<<"WSAStartupError!"<<endl;return1;}if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=0){cout<<"Versionnotrignt!"<<endl;WSACleanup();return1;}//創(chuàng)建套接字//第二個參數(shù)和TCP設(shè)置不同SOCKETsockSrv=socket(AF_INET,SOCK_DGRAM,0);SOCKADDR_INaddrSrv;////設(shè)置服務(wù)器端套接字的地址結(jié)構(gòu)的相關(guān)屬性addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//設(shè)置IPaddrSrv.sin_port=htons(20000);////設(shè)置端口號addrSrv.sin_family=AF_INET;//將套接字和服務(wù)器地址結(jié)構(gòu)綁定bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));charrecvBuf[100];charsendBuf[100];chartempBuf[100];SOCKADDR_INaddrClient;intlen=sizeof(SOCKADDR);while(1){//從客戶端接收數(shù)據(jù)recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);if('q'==recvBuf[0]){sendto(sockSrv,"q",strlen("q")+1,0,(SOCKADDR*)&addrClient,len);cout<<"chartend"<<endl;break;//退出循環(huán)}//將對方發(fā)送過來的信息前段加上IP地址進行輸出sprintf(tempBuf,"%ssay%s\n",inet_ntoa(addrClient.sin_addr),recvBuf);cout<<tempBuf<<endl;//將用戶的鍵盤輸入發(fā)送到對方cout<<"Pleaseinputmessage:"<<endl;gets(sendBuf);sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len);}closesocket(sockSrv);WSACleanup();return0;}下面編寫聊天客戶端程序,實現(xiàn)代碼如下:Chatclient#include<iostream>#include<WinSock2.h>#pragmacomment(lib,"Ws2_32.lib")//靜態(tài)加入一個lib文件usingnamespacestd;intmain(intargc,CHAR*argv[]){WORDwVersionRequested;WSADATAwsaData;interr;wVersionRequested=MAKEWORD(2,0);err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){cout<<"WSAStartupError!"<<endl;return1;}if(LOBYTE(wsaData.wVersion)!=2
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025餐飲合作協(xié)議合同
- 2025屋面瓦施工合同
- 2025建設(shè)施工項目預(yù)拌混凝土銷售合同
- 課題申報參考:跨文化主義范式下的19世紀(jì)中法藝術(shù)交流研究
- 歷史地質(zhì)資料對現(xiàn)代山區(qū)橋梁設(shè)計的借鑒價值
- 校園內(nèi)消防安全培訓(xùn)與應(yīng)急救援隊伍建設(shè)
- 如何以醫(yī)療技術(shù)提升患者滿意度與就醫(yī)體驗
- 酒店健康養(yǎng)生主題的營銷活動策劃建議
- 小學(xué)科學(xué)課程中跨學(xué)科學(xué)習(xí)的實施策略
- 【研報】“雙碳”政策持續(xù)發(fā)力綠電主題現(xiàn)投資機會-興業(yè)證券
- 安徽省蚌埠市2025屆高三上學(xué)期第一次教學(xué)質(zhì)量檢查考試(1月)數(shù)學(xué)試題(蚌埠一模)(含答案)
- 【探跡科技】2024知識產(chǎn)權(quán)行業(yè)發(fā)展趨勢報告-從工業(yè)轟鳴到數(shù)智浪潮知識產(chǎn)權(quán)成為競爭市場的“矛與盾”
- 《中國政法大學(xué)》課件
- GB/T 35270-2024嬰幼兒背帶(袋)
- 遼寧省沈陽名校2025屆高三第一次模擬考試英語試卷含解析
- 2024-2025學(xué)年高二上學(xué)期期末數(shù)學(xué)試卷(新題型:19題)(基礎(chǔ)篇)(含答案)
- 2022版藝術(shù)新課標(biāo)解讀心得(課件)小學(xué)美術(shù)
- Profinet(S523-FANUC)發(fā)那科通訊設(shè)置
- 第三章-自然語言的處理(共152張課件)
- 醫(yī)學(xué)教程 常見化療藥物歸納
- 行政事業(yè)單位國有資產(chǎn)管理辦法
評論
0/150
提交評論