UDP程序設計(c語言課程設計)_第1頁
UDP程序設計(c語言課程設計)_第2頁
UDP程序設計(c語言課程設計)_第3頁
UDP程序設計(c語言課程設計)_第4頁
UDP程序設計(c語言課程設計)_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、07網絡工程本北4-626寢室第十一章UDP程序設計負責人:林型超:UDP協議,即擁護數據報協議(UseDatagramProtocol).是一個簡單的面向數據報的傳輸層協議他不提供可靠性,即只把應用程序傳給IP層的數據發送出去,但是并不能保證他們能到達目的廣播和多播是基于UDP協議的兩種消息發送機制廣播數據即從一個工作站發出,局域網內的其他所有工作站都能收到它.IP協議下,多播是廣播的一種變形,IP多播要求將對收發數據感興趣的所有主機加入到一個特定的組.本章實現的程序即有廣播的功能又有多播的功能,能實現基本的廣播和多播機制,其主要包括如下功能.提供廣播機制.能設定身份,即是廣播消息發送者還是

2、接收者,默認是消息接收者.能在默認的廣播地址和端口號上發送廣播消息,接收廣播廣播消息.能指定廣播地址,端口號,發送(或接收)數量選項進行廣播消息的發送和接收.提供多播機制能制定身份,即是多播消息發送者好事接收者,默認是消息接收者.主機能加入一個指定多播組.能以默認選項發送多播消息.接收多播消息.能指定多播地址,本地接口地址,端口號,發送(或接收)數量和數據反還標志選項進行多播消息的發送和接收.總體設計功能模塊設計1.功能模塊圖本程序有3大部分組成,即廣播模塊,多播模塊部分,如圖11.1所示.其中公共模塊和多播模塊共享的部分,包括初始化模塊,參數獲取模塊和用戶幫助模塊;廣播模塊包括廣播消息模塊;

3、多播模塊包括多播功能控制模塊,多播消息發送模塊和多播消息接收模塊.圖11.1功能模塊圖1)公共模塊初始化模塊.該模塊主要用于初始化全局變量,為全局變量賦初始值.參數獲取模塊.該模塊用于獲取用戶提供的參數,包括獲取廣播參數,多播參數和區分廣播與多播公共參數等.用戶幫助模塊.該模塊應于顯示用戶幫助,包括顯示公共幫助,廣播幫助和多播幫助.2)廣播模塊(1)廣播消息發送模塊.該模塊用于現實在指定廣播地址和端口發送指定數量的廣播消息.廣播消息接收模塊.該模塊用于現實在指定廣播地址和端口接收指定數量的廣播消息.3)多播模塊(1)多播功能控制模塊.該模塊用于現實多播套接字的創建和綁定,多播地址的設定,多播數

4、據的設置,數據反還選項的設置,以及多播組的加入等.(2)多撥消息發送模塊.該模塊用于現實在指定多播組發送多播消息.多播消息接收模塊.該模塊用于現實在指定多播組接收多波消息.2.系統流程圖系統流程圖如圖11.2所示.程序首先初始化全局變量,包括廣播(多播)地址,端樓號,發送(接收)消息數量等,然后花圈用戶提供的參數,并初始化Winsock初始也成功則判斷是進行廣播還是多播程序;如果是廣播,則判斷是發送者身份還是接收身份,然后根據不同的身份進行相應的處理,即發送廣播消息或者接收廣播消息;同樣地,如果是多播,也驚醒身份的判斷,然后作同樣的處理.開始否成功?曰.否成功?是是否廣播?是是否否發送?開始發

5、送不是獲取參數設置接收廣播消息發送廣播消息初始化全局變初始化Winsock接收多播消息發送多播消息圖11.2系統流程圖3.廣播消息發送流程圖廣播消息流程圖如圖11.3所示.程序首先創建UDP套接字,如果創建成功則設置廣播地址;由于進行的是廣播機制,所以要將套接字時針為廣播類型,即SO-BROADCAST;如果套接字選想不開設置成功則可以避免向指定的廣播地址廣播消息了.廣播結束后(即達到最多的消息條數),關閉套接字,釋放占用資源.結束開始創建成功?是否設置成功?否是發送成功?是否結束還可以發關閉套接字釋放占用資源是發送消息到廣播地址設置套接字為廣播類型設置廣播地址選項創建UDP套接字輸出成功信息

6、輸出錯誤信息圖11.3廣播消息發送流程圖結束關閉套接字釋放占用資源圖11.4廣播消息接收流程4.廣播消息接收流程圖廣播消息的接收流程如圖11.4所示程序首先創建UDP套接字,如果創建成功則設置本地地址和廣播地址,本地地址用于綁定套接字,廣播地址是廣播消息接收的地址.同發送廣播消息一樣,接收消息的套接字也要設置選項,不同的是,這里將套接字設置成可重用類型的,即SO-REUSEADDR,選項級別為SOL-SOCKET.這樣一來,在相同的本地接口及端口上可以進行多次監聽,即在同一臺主機上,可以啟動多個消息接收端來接收廣播消息,如果不設置這個選項,則在同一臺主機上,只能啟動一個消息接收端來接收消息.套

7、接字選拔設置成功后,綁定本地地址與套接字,即可以從廣播地址接收廣播消息,如果接收的消息條數達到最大限制則結束程序,關閉套接字,釋放占用資源.開始創建UDP套接字設置本地地址選項設置廣播地址選項設置套接字為可重用類型綁定套接字和本地地址接收廣播消息輸出接收的消息清空緩沖區還可以接程序實現源碼分析程序預處理程序預處理包括庫文件的導入、頭文件的加載、廣播和常量定義以及廣播全局變量和多播全局變量的定義。/*加載庫文件*/*加載頭文件*/*定義多播常量/*定義廣播常量*defineB/*定義廣播全局變量*定義多播全局變量*自定義函數初始化模塊初始化模塊用于為廣播全局變量和多播全局變量賦處始值,由函數實現

8、。初始化廣播全局變量/*初始化多播全局變量*/參數獲取模塊參數獲取模塊用于獲取用戶提供的選項,包括全局選項(即廣播和多播選擇選項)、廣播選項和多播選項,該模塊由函數實現。參數獲取函數初如果參數個數小于2個初獲取廣播選項廣播標志設置為真*如果是發送者*廣播的地址*廣播的端口號*廣播(接收或者發送)的數量*其他情況顯示用戶幫助,終止程序獲取/多*播選項多播標志/設*置為真如果是發送者多播地址本地接口地址多播端口號環回標志設置為真發送(接收)的數量其他情況,顯示用戶幫/助*,終止程序全*局用戶幫助函數*廣播用戶幫助函數*多播用戶幫助函數5廣.播消息發送模塊廣播消息發送模塊實現廣播消息的發送功能,即在

9、指定廣播地址和端口上發送指定數量的消息。該模塊由函數來實現其實現流程可參見圖該函數需要接收選項“廣播地址”、“端口號”、“發送數量”,如果用戶沒有提供這些選項,函數將以默認值執行。/廣*播消息發送函數*/設置/廣*播的消息創建套接字如果/創*建失敗*設置/廣*播地址各個選項設置/該*套接字為廣播類型如果/設*置失敗循環/發*送消息延遲1秒/從廣播地/址*發送消息如果發送/失*敗如果發送/成*功發送/完*畢后關閉套接字、釋放占用資源6廣播消息接收模塊廣播消息接收模塊實現廣播消息的接收功能,既在指定廣播地址和端口上接收指定數量的消息。該模塊由函數來實現,其實現流程可參見圖。同發送廣播消息一樣,該函

10、數也需要接收選項“廣播地址”、“端口號”、“發送數量”,如果用戶沒有提供這些選項,函數將以默認值執行。需要注意的是,如果發送端不是采用默認的廣播地址和端口號,則接收端也要使用相應的廣播地址和端口號即通過選項來提供與發送端相同的廣播地址和端口號。/*廣播消息接收函數*/該地/址*用來綁定套接字該地/址*用來接收網路上廣播的消息創建套接字如果/創*建失敗設置/該*套接字為可重用類型*如果/設*置失敗*/綁定/套*接字和地址*/如果/綁*定失敗*/從廣/播*地址接收消息*/延遲2秒/鐘*/輸出接收/到*緩沖區的消息情況緩沖/區*/接收/完*畢后關閉套接字、釋放占用資源多播功能控制模塊.多播功能控制模

11、塊是為多播發送模塊和多播接收模塊服務的,它實現多播的套接創建和綁定功能、套接字選項設置功能、多播組加入功能等。該模塊由函數來實現,其實現流量可參見圖11。.5/*多播控制函數*/創建套接字,用于多播設置本地接口地址將套接字綁定到本地地址上如果綁定失敗設置置多*播地址各個選項重新設置值設置多播數據的存在時間值。默認情況下,值是如果設置失敗如果/指*定了返還選項*/設置返還置選*項為假,禁止將發送的數據返還給本地接口如果設置置失*敗*置加入置多*播組*置如果置加*入不成功8、多播消息發送模塊多播消息發送模塊實現多播消息的發送,即發送者(需提高“-S”選項標識)在指定的多播組、端口發送指定數量的多播

12、消息,消息發送過程中還可以設置是否允許消息返還(通過“-1”設置)。該模塊由函數multicastSend()來實現,其實現過程是先調用mulControl()函數實現準備工作(多播的套接創建和綁定功能、套接字選項設置功能、多播級加入功能等),然后發送指定數量的消息。與廣播函數一樣,該函數也需要接收選項“-h(廣播地址)”、“-p(端口號)”“-i(本地接口)”、和“-n(發送數量)”,如果用戶沒有提供這些選項,函數將以默認值執行。/*多播消息發送函數*/voidmulticastSend()TCHARsendbufBUFSIZE;DWORDi;intret;mulControl();/*發送

13、mCount條消息*/for(i=0;imCount;i+)/*將待發送的消息寫入發送緩沖區*/sprintf(sendbuf,server1:Thisisatest:%d,i);ret=sendto(socketMul,(char*)sendbuf,strlen(sendbuf),0,(structsockaddr*)&addrMul,sizeof(addrMul);/*如果發送失敗*/if(ret=SOCKET_ERROR)printf(sendtofailedwith:%dn,WSAGetLastError();closesocket(sockJoin);closesocket(sock

14、etMul);WSACleanup();return;/*如果發送成功*/elseprintf(Sendmessage%dn,i);Sleep(500);/*關閉套接字、釋放占用資源*/closesocket(socketMul);WSACleanup();9、多播消息接收模塊多播消息接收模塊實現多播消息的接收,即接收者在指定的多播級、端口接收指定數量的多播消息。該模塊由函數multicastRec()來實現,其實現過程是先調用mulControl()函數實現準備工作(多播的套接創建和綁定功能、套接字選項設置功能、多播級加入功能等),然后接收指定數量的消息。該函數也需要接收選項“-h(廣播地址

15、)”“-p(端口號)”“-n(發送數量)”,如果用戶沒有提供這些選項,函數將以默認值執行。/*多播消息接收函數*/voidmulticastRec()DWORDi;structsockaddr_infrom;TCHARrecvbufBUFSIZE;intret;intlen=sizeof(structsockaddr_in);mulControl();/*接收mCount條消息*/for(i=0;imCount;i+)/*將接收的消息寫入接收緩沖區*/if(ret=recvfrom(socketMul,recvbuf,BUFSIZE,0,(structsockaddr*)&from,&len)

16、=SOCKET_ERROR)/*如果接收不成功*/printf(recvfromfailedwith:%dn,WSAGetLastError();closesocket(sockJoin);closesocket(socketMul);WSACleanup();return;/*接收成功,輸出接收的消息*/recvbufret=0;printf(RECV:%sfromn,recvbuf,inet_ntoa(from.sin_addr);/*關閉套接字、釋放占用資源*/closesocket(socketMul);WSACleanup();10、主函數主函數實現Winsock的初始化、廣播與多播

17、的選擇以及發送者與接收者身份選擇等功能其實現流程可參見圖11.2。/*主函數*/intmain(intargc,char*argv)WSADATAwsd;initial();GetArgments(argc,argv);/*初始化Winsock*/if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)printf(WSAStartup()failedn);return-1;/*如果是執行廣播程序*/if(broadFlag)/*以發送者身份發送消息*/if(broadSendFlag)broadcastSend();return0;/*以接收者身份接收消息*/elsebro

18、adcastRec();return0;/*如果是執行多播程序*/if(multiFlag)/*以發送者身份發送消息*/if(multiSendFlag)multicastSend();return0;/*以接收者身份接收消息*/elsemulticastRec();return0;return0;提示:由于在TC或者Win-TC中沒有編譯套接字的頭文件,所以該程序需要在VisualC+或者具有Winsock頭文件的編譯器中編譯。本章程序已經在VisualC+6.0中通過編譯。11.4.2運行結果本節將測試程序的運行,主要包括測試不帶選項啟動服務、以默認選項啟動廣播發送和接收端、以指定選項啟動

19、廣播發送和接收端、以默認選項啟動多播發送和接收端、以默認選項啟動多播接收和發送接收端。1、不帶選項啟動服務程序運行時,至少要帶一個選項“-m”(指示多播)或“-b”(指示廣播),如果沒有帶選項,則程序終止并顯示所有的用戶幫助,如圖11.6所示。圖11.6中,顯示了全局用戶幫助、廣播用戶幫助和多播用戶幫助。11.4.2運行結果本節將測試程序的運行,主要包括測試不帶懸想啟動服務,以默認選項啟動廣播發送和接收端,以指定選項啟動廣播發送和接受端,以默認選項啟動多播發送和接收端,以默認選項啟動多播接受和發送接收端。不帶選項啟動服務程序運行時,至少要帶一個選項“-m”(指示多播)或“-b”(指示多播),如

20、果沒有帶選項,則程序終止并顯示所有的用戶幫助,如圖11.6所示。圖11.6中,顯示了全局用戶幫助,廣播用戶幫助和多播用戶幫助。廣播測試廣播測試主要包括帶錯誤選項啟動廣播,以默認選項啟動廣播發送端接收端及以指定選項啟動廣播發送端和接收端。1)帶錯誤選項啟動廣播如果在廣播中提供了錯誤的選項,冊程序會終止并顯示廣播用戶幫助。如圖11.7所示廣播中沒有提供“-a”選項,所以程序會終止并會顯示廣播用戶幫助。2)以默認選項啟動廣播以默認啟動廣播,即廣播地址是“INADDR-BROADCAST”,端口號是“5050”,發送10條信息。如圖11.8所示,其中“-”表示是發送者身份。在另一臺主機啟動廣播發送端,如圖11.10所示,指定的廣播地址是“202.204.53.255”(表示在“202.204.53”這個網段進行廣播),端口號是“9999”,發送數量為8條。在圖11.10中,顯示了8條消息(消息07)。如果在另一個主機上,在全1的廣播地址上(端口號仍是“9999”)接收廣播消息,仍然能受到廣播發送端發送的消息,如圖11.12素食。3.多播測試多播測試主要包括帶錯誤的選項啟動多播,以默認選項啟動多播發送端和接受收端及以指定選項啟動多播發送端和接受端1)帶錯誤選項啟動多播如果在多播中提供了錯誤的選項,冊程序會中指并顯示

溫馨提示

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

評論

0/150

提交評論