歡迎來到裝配圖網! | 幫助中心 裝配圖網zhuangpeitu.com!
裝配圖網
ImageVerifierCode 換一換
首頁 裝配圖網 > 資源分類 > PPT文檔下載  

第10章 廣播與多播編程 (2)

  • 資源ID:253388139       資源大?。?span id="q7nk1nv" class="font-tahoma">166.01KB        全文頁數:20頁
  • 資源格式: PPT        下載積分:16積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要16積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

第10章 廣播與多播編程 (2)

單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,第10章,廣播與多播編程,廣播,一個,IP,地址由網絡號和主機號組成。所有主機號部分為全,1,的,IP,地址是廣播地址。,發(fā)送應用進程,UDP,IPv4,數據鏈路,UDP,IPv4,數據鏈路,數據鏈路,IPv4,UDP,接收應用進程,以太網,頭部,IPv4,頭部,UDP,頭部,UDP,數據,子網128.7.6,目的以太網,=,ff:ff:ff:ff:ff:ff,幀類型,=0800,目的,IP=128.7.6.255,協(xié)議,=UDP,目的端口,=520,Sendto,目的,IP=128.7.6.255,目的端口,=520,丟棄,協(xié)議,=UDP,幀類型,0800,128.7.6.99=,單播,128.7.6.255=,廣播,128.7.6.5=,單播,128.7.6.255=,廣播,協(xié)議,=UDP,端口,=520,廣播的實現,應用程序只能通過,UDP,方式發(fā)送廣播。,一般情況下,如果調用,sendto,,只能向非廣播地址發(fā)送數據報。如果要發(fā)送廣播數據報,必須告訴內核,可以通過設置,SO_BROADCAST,套接口選項來做到這一點。,int,on=1;,setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int,);,廣播實例,服務端為,tserv.c,,運行時需指定廣播地址和端口號,運行后每,3,秒發(fā)送一次廣播,將本機時間通知本子網內所有主機。,服務器端程序,tserv.c,#include,#include,#include,#include,#define BUFLEN 255,void,getcurtime(char,*,curtime,),time_t,tm;,time(&tm,);,snprintf(curtime,BUFLEN,%sn,ctime(&tm,);,int,main(int,argc,char,*,argv,),struct,sockaddr_in,peeraddr,;,int,sockfd,on,=1;,int,num,i,;,char msgBUFLEN+1;,if(argc,!=3),printf(usage:%s,n,argv0);,exit(0);,sockfd,=socket(AF_INET,SOCK_DGRAM,0);,if(sockfd,0),fprintf(stderr,socket,creating error in,,);,exit(1);,setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int,);,memset(&peeraddr,0,sizeof(struct,sockaddr_in,);,peeraddr.sin_family,=AF_INET;,if(inet_pton(AF_INET,argv1,&peeraddr.sin_addr)=0),printf(Wrong,dest,IP addressn);,exit(0);,peeraddr.sin_port,=htons(atoi(argv2);,for(;),getcurtime(msg,);,int,a;,a=sendto(sockfd,msg,strlen(msg),0,(struct,sockaddr,*)&,peeraddr,sizeof(struct,sockaddr_in,);,printf(%d,a,);,fflush(stdout,);,sleep(3);,客戶端程序,tcli.c,(,只需偵聽某一固定端口的數據報,接收一個數據報就返回。,),#include,#include,#include,#include,#define BUFLEN 255,int,main(int,argc,char,*,argv,),struct,sockaddr_in,localaddr,;,int,sockfd,n,;,char msgBUFLEN+1;,if(argc,!=2),printf(usage:%s,n,argv0);,exit(0);,sockfd,=socket(AF_INET,SOCK_DGRAM,0);,if(sockfd,0),fprintf(stderr,socket,creating error in,,);,exit(1);,memset(&localaddr,0,sizeof(struct,sockaddr_in,);,localaddr.sin_port,=htons(atoi(argv1);,localaddr.sin_addr.s_addr,=,htonl(INADDR_ANY,);,int,opt=SO_REUSEADDR;,setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt,);,if(bind(sockfd,(struct,sockaddr,*)&,localaddr,sizeof(struct,sockaddr_in,)0),fprintf(stderr,bind,error in,,);,exit(2);,n=,read(sockfd,msg,BUFLEN,);,if(n,=-1),fprintf(stderr,read,error in,,);,exit(3);,else,msgn,=0;,printf(%s,msg,);,程序運行結果,如果在服務器端輸入,./,serv,222.18.113.171 1234,則兩個客戶不會同時收到數據報。,多播,多播是,通過,D,類地址進行的,,D,類地址的前,4,位為,1110,,后面,28,位為群播的組標識。,地址范圍,224.0.0.0,到,239.255.255.255,特殊的,IPv4,多播地址:,224.0.0.0,保留,224.0.0.1,本子網上所有主機,224.0.0.2,本子網上所有網關,224.0.1.1 NTP(,網絡時間協(xié)議,),組,多播的,原理,當一個多播分組到達一個以太網時,形成幀后它的,MAC,地址為,01:00:5e:xx:xx:xx,,其后,23,位由多播組標識的后,23,位映射而成。例如目的地址為,224.0.1.1,的多播分組,在以太網上幀的,MAC,地址就為,01:00:5e:00:01:01,,如下圖示。,11100000,00000000,00000001,00000001,00000001,00000000,01011110,00000000,00000001,00000001,IP,地址,MAC,地址,由于多播,IP,地址中組標識有,28,位,而映射到,MAC,地址的只有,23,位,還差,5,位,所以有,32,個組將映射成相同的,MAC,地址,例如,224.0.0.1,,,225.0.1.1,239.128.1.1,都映射到,MAC,地址,01:00:5e:00:01:01,。因此要由,IP,層來檢驗到達的多播分組是否是自已所加入的多播組。如果不是,則拋棄該分組。,應用程序,UDP,IP,層,132.0.0.100,數據鏈路層,52:37:4a:6d:7f:5e,應用程序,UDP,IP,層,132.0.0.129,應用程序,UDP,IP,層,132.0.0.168,數據鏈路層,52:23:4e:6f:2c:35,數據鏈路層,00:2e:2c:5f:ae:3f,發(fā)送數據報,IP:224.0.1.1,端口,1234,通過,ARP,解析,224.0.1.1,對應,01:00:5e:00:01:01,接收數據報,端口,1234,應用程序指定,132.0.0.129,加入多播組,224.0.1.1,IP,層指示接收,MAC,地址為,01:00:5e:00:01:01,的幀,加入,225.0.1.1,丟棄,多播數據報在子網中的發(fā)送接收,多播,的,實現,應用程序只需向多播組地址發(fā)送數據報,接收應用程序加入這個多播組。在指定端口上進行偵聽。,加入多播組的方法是設置套接口選項,IP_ADD_MEMBERSHIP.,它要用要如下結構:,Struct,ip_mreq,struct,in_addr,imr_multiaddr,;/*IPv4,的,D,類多播地址*,/,Struct,in_addr,imr_interface,;/*,本地接口,IPv4,地址*,/,;,例:,setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mcaddr,sizeof(struct,ip_mreq,),多播的實現,服務器端程序沒有什么改變,只要將設置,socket,選項,SO_BROADCAST,的那行去掉就可以了。,客戶程序源碼如下頁:,源程序,mtcli.c,#include,#include,#include,#include,#define BUFLEN 255,int,main(int,argc,char,*,argv,),struct,sockaddr_in,localaddr,;,int,sockfd,n,;,struct,ip_mreq,mcaddr,;,char msgBUFLEN+1;,if(argc,3),printf(usage:%s,n,argv0);,exit(0);,sockfd,=socket(AF_INET,SOCK_DGRAM,0);,if(sockfd,0),fprintf(stderr,socket,creating error in,,);,exit(1);,memset(&localaddr,0,sizeof(struct,sockaddr_in,);,localaddr.sin_port,=htons(atoi(argv2);,localaddr.sin_addr.s_addr,=,htonl(INADDR_ANY,);,if(inet_pton(AF_INET,222.18.113.171,&,mcaddr.imr_interface,)=0),perror(failure,);,exit(0);,if(inet_pton(AF_INET,argv1,&,mcaddr.imr_multiaddr,)=0),printf(Wrong,multicast IP addressn);,exit(0);,printf(ip:%s,inet_ntoa(mcaddr.imr_multiaddr,);,fflush(stdout,);,if(,setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mcaddr,sizeof(struct,ip_mreq,),0),perror(setsockopt,error in,mtcli.c,join,multicast failedn);,exit(4);,if(bind(sockfd,(struct,sockaddr,*)&,localaddr,sizeof(struct,sockaddr_in,)0),fprintf(stderr,bind,error in,,);,exit(2);,n=,read(sockfd,msg,BUFLEN,);,if(n,=-1),fprintf(stderr,read,error in,,);,exit(3);,else,msgn,=0;,printf(%s,msg,);,程序運行結果,向多播組,224.0.4.5,發(fā)送數據報,加入,224.0.4.5,并在,1234,端口偵聽,思考:客戶收到數據報的源地址是多少?,

注意事項

本文(第10章 廣播與多播編程 (2))為本站會員(hs****5)主動上傳,裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對上載內容本身不做任何修改或編輯。 若此文所含內容侵犯了您的版權或隱私,請立即通知裝配圖網(點擊聯系客服),我們立即給予刪除!

溫馨提示:如果因為網速或其他原因下載失敗請重新下載,重復下載不扣分。




關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯系我們

copyright@ 2023-2025  sobing.com 裝配圖網版權所有   聯系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網,我們立即給予刪除!