




已閱讀5頁,還剩32頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
基于UDP協議的Socket編程,講課人:潘煒Tel:E-mail:,2,教學目的和重點,目的掌握基于UDP協議的Socket編程方法重點基于UDP協議的Socket編程模型和程序設計流程,3,知識點,UDP協議的工作流程基于UDP協議的Socket編程模型服務器程序設計思路客戶機程序設計思路程序示例分析,4,UDP協議的特點,UDP協議的特點:UDP不要求保持一個連接UDP沒有因接收方認可收到數據包(或當數據包沒有正確抵達而自動重傳)而帶來的開銷。設計UDP的目的是用于短應用和控制消息UDP要求的網絡帶寬比TCP更小。,5,使用UDP協議的場合,傳送的數據對順序和可靠性要求不高簡單的發送接收的一次通信形式傳輸的數據量較少發送廣播或多播信息,6,打電話與發短信的區別,7,問題,透過現象看本質為什么一個人同時只能應付一個人打來的電話,而可以應付多個人的短信?,8,UDP和TCP的區別,TCP面向連接,完整的“流”UDP無連接,一個一個獨立的報文UDP和TCP的區別決定了UDP的編程模式和TCP有很大差別,9,接收數據recvfrom(),基于UDP協議的Socket編程模型,服務器,綁定套接字bind(),客戶機,發送數據sendto(),綁定套接字bind(),數據傳輸,數據傳輸,關閉套接字closesocket(),創建套接字socket(),初始化套接字WSAStartup(),注銷套接字WSACleanup(),創建套接字socket(),初始化套接字WSAStartup(),發送數據sendto(),接收數據recvfrom(),關閉套接字closesocket(),注銷套接字WSACleanup(),模型(一),10,基于UDP協議的Socket編程模型,模型(一)的特點:應用程序雙份是對等的。使用數據報套接字通信時都經過6個階段:初始化套接字接口創建套接字綁定套接字發送/接收數據,交換信息關閉套接字注銷套接字接口,11,基于UDP協議的Socket編程模型,模型(一)的特點:雙方必須確切地知道對方的網絡地址,且將約定好的自己的網絡地址綁定到自己的套接字上。每次發送或接收數據報時,所使用的sendto()和recvfrom()中要包括對方的網絡地址信息。recvfrom()在沒有收到數據前,默認情況下會阻塞,程序不向下執行。,12,接收數據recvfrom(),基于UDP協議的Socket編程模型,服務器,綁定套接字bind(),客戶機,發送數據sendto(),數據傳輸,數據傳輸,關閉套接字closesocket(),創建套接字socket(),初始化套接字WSAStartup(),注銷套接字WSACleanup(),創建套接字socket(),初始化套接字WSAStartup(),發送數據sendto(),接收數據recvfrom(),關閉套接字closesocket(),注銷套接字WSACleanup(),模型(二),13,基于UDP協議的Socket編程模型,模型(二)的特點:應用程序雙份是不對等的。服務器要先行啟動,處于被動的等待訪問狀態;客戶機則可隨時主動請求訪問服務器。完成一次通信時服務器要經過6個階段:初始化套接字接口創建套接字綁定套接字發送/接收數據,交換信息關閉套接字注銷套接字接口而客戶機不需要綁定套接字。,14,基于UDP協議的Socket編程模型,模型(二)的特點:服務器將套接字綁定到周知的端口或指定的端口,且客戶機必須確切地知道服務器端套接字使用的網絡地址。客戶機套接字使用動態分配的自由端口,不需要進行綁定。服務器事先不必知道客戶機套接字使用的網絡地址。客戶機必須先發送數據報,服務器收到后才能知道客戶機的地址,才能給客戶機回送數據報。,15,UDP流程,socket(),創建套接字s,16,sendto(),發送一個數據報intsendto(SOCKETs,constcharFAR*buf,intlen,intflags,conststructsockaddrFAR*to,inttolen);返回值成功:返回實際發送的字節數失敗:返回SOCKET_ERROR,指定對端的地址結構,指定對端的地址結構長度,17,recvfrom(),接收一個數據報intrecvfrom(SOCKETs,charFAR*buf,intlen,intflags,structsockaddrFAR*from,intFAR*fromlen);返回值成功:返回實際接收的字節數連接已終止:0失敗:返回SOCKET_ERROR,接收發過來的地址結構,18,問題,如果返回0,意味著什么?,19,答案,TCP字節流可以發送0字節報文若接收到0字節,意味著連接被優雅地關閉UDP數據報可以發送0字節報文若接收到0字節,意味著報文長度為0并關閉連接recvfrom()和sendto()也可以用在TCP中此時,接收到0字節意味著連接被優雅地關閉一般不這樣用,20,s=socket(AF_INET,SOCK_DGRAM,0);structsockaddr_inlocaladdr;memset(void*),程序范例recvfrom(),21,SOCKETs;s=socket(AF_INET,SOCK_DGRAM,0);structsockaddr_inlocaladdr;memset(void*),程序范例sendto(),22,示例1,示例1:利用基于UDP協議的Socket編程實現客戶機與服務器的簡單通信。服務器啟動后將在8888號端口監聽客戶機啟動后主動連接服務器端并發送字符串“Hello”服務器接收并顯示“Hello”,服務器,客戶機,Hello,23,示例1,演示UdpClient程序與UdpServer程序間通信,24,TCP流程,accept,25,UDP流程,26,TCP編程模式,main()socket();bind();listen();accept();,thread()recv();send();,thread()recv();send();,thread()recv();send();,main()socket();connect();send();recv();,main()socket();connect();send();recv();,main()socket();connect();send();recv();,27,UDP編程模式,main()socket();bind();recvfrom();sendto();recvfrom();sendto();recvfrom();sendto();,main()socket();bind();sendto();recvfrom();,main()socket();bind();sendto();recvfrom();,main()socket();bind();sendto();recvfrom();,28,示例2,利用Socket編程實現基于UDP協議的廣播通信。通信步驟:創建數據報套接字,只有數據報套接字支持廣播通信。綁定套接字于指定的地址和端口。通過套接字選項設置數據報套接字的廣播屬性。通過sendto()函數發送廣播信息,只能使用sendto函數,發送地址為INADDR_BROADCAST(廣播地址)。通過recvfrom()函數接收廣播消息。,29,示例2:演示UDP廣播發送數據的例子,宏定義INADDR_BROADCAST表示廣播地址,即0 xFFFFFFFF,30,示例2:演示UDP廣播發送數據的例子,設置套接字選項函數setsockopt()intFARsetsockopt(SOCKETs,intlevel,intoptname,constcharFAR*optval,intoptlen);s:標識一個套接口的描述字。level:選項定義的層次;支持SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP、IPPROTO_IPv6層次。optname:需設置的選項。optval:指針,指向存放選項值的緩沖區。optlen:optval緩沖區長度。,31,示例2:演示UDP廣播發送數據的例子,選項設置:讓Socket發送的數據具有廣播特性:BOOLbBroadcast=TRUE;setsockopt(s,SOL_SOCKET,SO_BROADCAST,(constchar*),32,示例3,利用Socket編程實現基于UDP協議的多播通信。通信步驟:創建數據報套接字。綁定套接字于指定的地址和端口。通過套接字選項設置數據報套接字的多播屬性。通過sendto()函數發送組播信息。通過recvfrom()函數接收組播消息。,33,示例3,利用Socket編程實現基于UDP協議的多播通信。多播地址:224.0.0.0224.0.0.255為預留的組播地址(永久組地址),地址224.0.0.0保留不做分配,其它地址供路由協議使用;224.0.1.0224.0.1.255是公用組播地址,可以用于Internet;224.0.2.0238.255.255.255為用戶可用的組播地址(臨時組地址),全網范圍內有效;239.0.0.0239.255.255.255為本地管理組播地址,僅在特定的本地范圍內有效。,34,示例3,利用Socket編程實現基于UDP協議的組播通信。IP多播組的加入和離開使用setsockopt()命令來完成:選項IP_ADD_MEMBERSHIP是加入組;選項IP_DROP_MEMBERSHIP是脫離組;使用套接字選項時,必須傳遞一個ip_mreq結構定義:structip_mreqstructin_addrimr_multiaddr;/多播組structin_addrimr_interface;/本地IP地址,35,示例3,利用Socket編程實現基于UDP協議的組播通信。IP多播組的加入和離開使用setsockopt()命令來完成:選項IP_ADD_MEMBERSHIP是加入組:setsockopt(s,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*),36,示例3,利用Socket編程實現基于UDP協議的組播通信。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 隧道機械化施工中的設備管理策略與實施計劃制定研究考核試卷
- 鉛酸電池的循環利用與環保技術考核試卷
- 貨運火車站物流企業績效管理體系構建與實施考核試卷
- 陶瓷藝術工作室運營與管理考核試卷
- 銅冶煉廠的安全管理體系構建與運行考核試卷
- 小兒常見眼部疾病診療與預防
- 食品營養與衛生
- 腦血管疾病的營養管理
- 呼吸科評分量表臨床應用與管理規范
- Glisoprenin-A-生命科學試劑-MCE
- 校長在2025暑假前期末教師大會上的講話:靜水深流腳踏實地
- (2025)全國“安全生產月活動”《安全知識》競賽試題庫(附含答案)
- (2025)黨校入黨積極分子培訓結業考試題庫與答案
- 2025年中國超薄柔性玻璃(UTG)行業深度分析、投資前景及發展趨勢預測報告(智研咨詢)
- 交房期間業主維權突發事件應急預案
- 貸款后管理與客戶滿意度提升
- 自動生成的文檔-202504081202-99
- 【專題訓練】專題04三角形(考題猜想九大題型)(學生版+解析)-2025年七年級數學下學期期末總復習(北師大版)
- 2025年全國護士資格考試試卷及答案
- 費用類報銷管理制度
- 難點01:總集篇·十三種簡便計算巧算法【十三大考點】-2024年小升初數學典型例題系列(原卷版+解析)
評論
0/150
提交評論