UDP服務器設計說明書_第1頁
UDP服務器設計說明書_第2頁
UDP服務器設計說明書_第3頁
UDP服務器設計說明書_第4頁
UDP服務器設計說明書_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

/計算機網(wǎng)絡課程設計集中上機實驗報告學生:學號:班級:專業(yè):XX郵電大學移通學院20XX12月目錄一.課程設計的目的和意義11.1課程設計的目的11.2課程設計的意義1二.課程設計題目和要求22.1UDP服務器的設計22.2UDP服務器設計的要求22.3UDP服務器的設計原理3三.詳細設計43.1需求分析43.2相關(guān)設計53.3程序流程63.4客戶機一方的工作流程73.5服務器一方的工作流程7四.代碼及注解74.1客戶端程序代碼74.2服務器端程序9五.程序運行結(jié)果分析115.1Windows下的測試運行情況11六.課程設計小結(jié)13七.參考書目14課程設計的目的和意義1.1課程設計的目的目的:設計一個基于UDP的服務器1.2課程設計的意義意義:UDP是TCP/IP協(xié)議族為傳輸層設計的兩個協(xié)議之一.它在進程與進程的通信過程中.提供了有限的差錯校驗功能.是一種無連接的.不可靠的協(xié)議。UDP在一個較低的水平上完成進程之間的通信.在收到分組的時候沒有流量控制機制也沒有確認機制.適用于可靠性比較高的局域網(wǎng)。由于UDP采取了無連接的方式.因此協(xié)議簡單.在一些特定的應用中協(xié)議運行效率高。UDP適合一些實時的應用.如IP電話.視頻會議.它們要求源主機以恒定的速率發(fā)送數(shù)據(jù).并且在網(wǎng)絡出現(xiàn)擁塞時.可以丟失一些數(shù)據(jù).但是延遲不能太大。基于這些特點.流式多媒體通信、多播等應用在傳輸層采用的就是UDP協(xié)議。因為UDP具有TCP所望塵莫及的速度優(yōu)勢。雖然TCP協(xié)議中植入了各種安全保障功能.但是在實際執(zhí)行的過程中會占用大量的系統(tǒng)開銷.無疑使速度受到嚴重的影響。反觀UDP由于排除了信息可靠傳遞機制.將安全和排序等功能移交給上層應用來完成.極大降低了執(zhí)行時間.使速度得到了保證。課程設計題目和要求2.1UDP服務器的設計UDP是TCP/IP協(xié)議族為傳輸層設計的兩個協(xié)議之一.是一種無連接的.不可靠的協(xié)議。由于UDP采取了無連接的方式.因此協(xié)議簡單.在一些特定的應用中協(xié)議運行效率高。UDP適合一些實時的應用.如IP電話、視頻會議.它們要求源主機以恒定的速率發(fā)送數(shù)據(jù).并且在網(wǎng)絡出現(xiàn)擁塞時.可以丟失一些數(shù)據(jù).但是延遲不能太大?;谶@些特點.流式多媒體通信、多播等應用在傳輸層采用的就是UDP協(xié)議。編寫UDP服務器程序.流暢地完成視頻文件地傳輸.要能對多個客戶端進行管理。需要通過UDP模擬多個客戶端連接驗證的情況。2.2UDP服務器設計的要求編寫程序.設計UDP服務器。因為考慮到實時性.所以選擇UDP為主要的網(wǎng)絡通信技術(shù)。<1>程序能流暢地完成信息內(nèi)容的傳輸和接收。<2>要能對多個客服端進行管理。需要通過UDP模擬多個客服端連接驗證的情況。<3>操作系統(tǒng)、使用語言和編譯環(huán)境不限.但在作業(yè)中必須注明。2.3UDP服務器的設計原理UDP是一個無連接協(xié)議.傳輸數(shù)據(jù)之前源端和終端不建立連接.當它想傳送時就簡單地去抓取來自應用程序的數(shù)據(jù).并盡可能快地把它扔到網(wǎng)絡上。在發(fā)送端.UDP傳送數(shù)據(jù)的速度僅僅是受應用程序生成數(shù)據(jù)的速度、計算機的能力和傳輸帶寬的限制;在接收端.UDP把每個消息段放在隊列中.應用程序每次從隊列中讀一個消息段。C++編程技術(shù)C++是在C語言的基礎上開發(fā)的一種集面向?qū)ο缶幊?、泛型編程和過程化編程于一體的編程語言[1]。應用較為廣泛.是一種靜態(tài)數(shù)據(jù)類型檢查的.支持多重編程的通用程序設計語言。它支持過程化程序設計.數(shù)據(jù)抽象.面向?qū)ο笤O計.制作圖標等多種程序設計風格。TCP/IP協(xié)議技術(shù)在T

C

P

/

I

P協(xié)議族中.有兩個互不相同的傳輸協(xié)議:

T

C

P〔傳輸控制協(xié)議和U

D

P〔用戶數(shù)據(jù)報協(xié)議。T

C

P為兩臺主機提供高可靠性的數(shù)據(jù)通信。它所做的工作包括把應用程序交給它的數(shù)據(jù)分成合適的小塊交給下面的網(wǎng)絡層.確認接收到的分組.設置發(fā)送最后確認分組的超時時鐘等。由于運輸層提供了高可靠性的端到端的通信.因此應用層可以忽略所有這些細節(jié)。而另一方面.

U

D

P則為應用層提供一種非常簡單的服務。它只是把稱作數(shù)據(jù)報的分組從一臺主機發(fā)送到另一臺主機.但并不保證該數(shù)據(jù)報能到達另一端。任何必需的可靠性必須由應用層來提供。TCP/IP協(xié)議與Winsock網(wǎng)絡編程接口Winsock規(guī)范不是一種網(wǎng)絡協(xié)議.而是一套開放的、支持多種協(xié)議的Windows寫的網(wǎng)絡編程接口。Winsock可以訪問很多種網(wǎng)絡協(xié)議.可以把它當作一種協(xié)議的封裝?,F(xiàn)在的Winsock已經(jīng)基本上實現(xiàn)了與協(xié)議無關(guān).可以使用Winsock來調(diào)用協(xié)議的功能WinsockAPI的使用下面給出了使用Winsock進行編程時涉及的主要函數(shù):WSAStartup函數(shù)、WSACleanup函數(shù)、socket函數(shù)、closesocket函數(shù)、send函數(shù)、recv函數(shù)、bind函數(shù)、listen函數(shù)、accept函數(shù)、connect函數(shù)詳細設計3.1需求分析隨著信息化的全面建設和普及中.服務器的角色舉足輕重.它為計算機提供網(wǎng)絡和技術(shù)的服務.也是整個網(wǎng)絡系統(tǒng)的核心部分.中小企業(yè)的建設會有很多波折和阻礙.前期是資金問題.在服務器方面秉著少花錢多辦事.高回報的原則。對于服務器方面能省則省.對于設置專門的技術(shù)人員維護服務器的企業(yè)也是屈指可數(shù)的.所以一般會選擇服務器租用服務和服務器代維服務.這對于服務器方面的開支就在可控成本之內(nèi)了。價格低廉.服務器有了穩(wěn)定保障.這也是目前很多中小企業(yè)的普遍做法。其次就是在挑選服務器方面.根據(jù)企業(yè)的實際業(yè)務.明確規(guī)劃服務器租用方向是很有必要的.隨著業(yè)務量的不斷上升.調(diào)整服務器的配置.從而保證資金和服務器得到充分利用。目前企業(yè)級的服務器大致有文件服務器.數(shù)據(jù)庫服務器.郵件服務器.web服務器.多媒體服務器.終端服務器等類型。這些服務器是根據(jù)企業(yè)的不同業(yè)務設置的。 UDP服務器是采用UDP協(xié)議的一類服務器的統(tǒng)稱。UDP不屬于連接型協(xié)議.因而具有資源消耗小.處理速度快的優(yōu)點.所以通常音頻、視頻和普通數(shù)據(jù)在傳送時使用UDP較多.因為它們即使偶爾丟失一兩個數(shù)據(jù)包.也不會對接收結(jié)果產(chǎn)生太大影響。比如我們聊天用的ICQ和QQ就是使用的UDP協(xié)議。所以根據(jù)企業(yè)的發(fā)展方向和業(yè)務要求.合理的搭配是很有必要的。3.2相關(guān)設計設計UDP服務器的過程如下所示。首先.創(chuàng)建又一個Socket并監(jiān)聽。然后啟動線程接收數(shù)據(jù)。用一個鏈表保存所有連上的客戶.并通知連接成功。這樣.客戶就有機會處理這一事件并作一些動作。最后.當客戶斷開時.向服務器發(fā)送一個事件.服務器就可以做一些收尾工作。其中最關(guān)鍵的部分是收發(fā)部分和數(shù)據(jù)處理部分。3.3程序流程Bind<>Bind<>Socket<>Readfrom<>等待客戶請求處理服務請求Sendto<>Close<>Socket<>Bind<>Sendto<>Readfrom<>Close<>服務請求服務應答服務器客戶機圖2.1服務器工作流程3.4客戶機一方的工作流程打開通信信道<申請一個套接字>.并連接到服務器在主機的保留端口.該端口對應服務器的UDP進程。向服務器發(fā)出請求報文.等待接收應答。從服務器方收到最終應答結(jié)果.或在不再請求時關(guān)閉信道并終止客戶機進程。3.5服務器一方的工作流程打開通信信道<申請一個套接字>.通知本地主機在某一保留端口接收客戶機請求。等待客戶機請求到達指定端口。接收到請求.啟動一個新進程處理用戶請求.同時釋放舊進程以響應新的客戶請求.一旦服務完成.關(guān)閉新進程與客戶的通信鏈路。繼續(xù)等待客戶機請求。如果不想響應客戶機請求.關(guān)閉服務器進程。代碼及注解4.1客戶端程序代碼#include<winsock2.h>#include<stdio.h>#pragmacomment<lib,"WS2_32">//鏈接到WS2_32.libBOOLInitWinsock<>;//初始化winsockvoidmain<>{ SOCKETsocket1;//定義套接字 InitWinsock<>;//初始化winsock structsockaddr_inserver;//定義結(jié)構(gòu)體 intlen=sizeof<server>;//定義結(jié)構(gòu)體的長度 server.sin_family=AF_INET;//server的地址族 server.sin_port=htons<1000>;///server的監(jiān)聽端口 server.sin_addr.s_addr=inet_addr<"172.16.93.187">;///server的地址 socket1=socket<AF_INET,SOCK_DGRAM,0>;//給套接字賦值 while<1>//使可以循環(huán)輸入 { charbuffer[1024]="\0";//定義緩沖區(qū) printf<"inputmessage\n">;//提示輸入 scanf<"%s",buffer>;//輸入 if<strcmp<buffer,"bye">==0>//比較字符串 break; if<sendto<socket1,buffer,sizeofbuffer,0,<structsockaddr*>&server,len>!=SOCKET_ERROR>//發(fā)送數(shù)據(jù) { if<recvfrom<socket1,buffer,sizeofbuffer,0,<structsockaddr*>&server,&len>!=SOCKET_ERROR>//接受數(shù)據(jù) printf<"recefromserver:%s\n",buffer>; } } closesocket<socket1>;//關(guān)閉套接字}BOOLInitWinsock<>{ intError; WORDVersionRequested;//版本號 WSADATAWsaData; VersionRequested=MAKEWORD<2,2>;//版本2的套接字 Error=WSAStartup<VersionRequested,&WsaData>;//啟動WinSock2 if<Error!=0> { returnFALSE; }//加載套接字庫失敗則返回 else { if<LOBYTE<WsaData.wVersion>!=2||HIBYTE<WsaData.wHighVersion>!=2>//判斷版本 { WSACleanup<>;//解除綁定并釋放空間 returnFALSE; } } returnTRUE;}//如果不是版本2則退出4.2服務器端程序#include<winsock2.h>#include<stdio.h>#pragmacomment<lib,"WS2_32">//鏈接到WS2_32.libBOOLInitWinsock<>;voidmain<>{ SOCKETsocket1;//定義套接字 InitWinsock<>; structsockaddr_inlocal; structsockaddr_infrom; intfromlen=sizeof<from>; local.sin_family=AF_INET; local.sin_port=htons<1000>;///監(jiān)聽端口 local.sin_addr.s_addr=INADDR_ANY;///本機 socket1=socket<AF_INET,SOCK_DGRAM,0>; bind<socket1,<structsockaddr*>&local,sizeoflocal>; while<1> { charbuffer[1024]="\0"; printf<"waitingformessagefromothers\n">; if<recvfrom<socket1,buffer,sizeofbuffer,0,<structsockaddr*>&from,&fromlen>!=SOCKET_ERROR> { printf<"Receiveddatagramfrom%s--%s\n",inet_ntoa<from.sin_addr>,buffer>; ////給cilent發(fā)信息 sendto<socket1,buffer,sizeofbuffer,0,<structsockaddr*>&from,fromlen>; } Sleep<500>; } closesocket<socket1>;}BOOLInitWinsock<>{ intError; WORDVersionRequested; WSADATAWsaData; VersionRequested=MAKEWORD<2,2>; Error=WSAStartup<VersionRequested,&WsaData>;//啟動WinSock2 if<Error!=0> { returnFALSE; } else { if<LOBYTE<WsaData.wVersion>!=2||HIBYTE<WsaData.wHighVersion>!=2> { WSACleanup<>; returnFALSE; } } returnTRUE;}程序運行結(jié)果分析5.1Windows下的測試運行情況圖1:查詢IP地址將IP地址為

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論