版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第10章廣播與多播編程廣播一個IP地址由網(wǎng)絡(luò)號和主機(jī)號組成。所有主機(jī)號部分為全1的IP地址是廣播地址。發(fā)送應(yīng)用進(jìn)程UDPIPv4數(shù)據(jù)鏈路UDPIPv4數(shù)據(jù)鏈路數(shù)據(jù)鏈路IPv4UDP接收應(yīng)用進(jìn)程以太網(wǎng)頭部IPv4頭部UDP頭部UDP數(shù)據(jù)子網(wǎng)128.7.6目的以太網(wǎng)=ff:ff:ff:ff:ff:ff幀類型=0800目的IP=128.7.6.255協(xié)議=UDP目的端口=520Sendto目的IP=128.7.6.255目的端口=520丟棄協(xié)議=UDP幀類型0800128.7.6.99=單播128.7.6.255=廣播128.7.6.5=單播128.7.6.255=廣播協(xié)議=UDP端口=520廣播的實現(xiàn)應(yīng)用程序只能通過UDP方式發(fā)送廣播。一般情況下,如果調(diào)用sendto,只能向非廣播地址發(fā)送數(shù)據(jù)報。如果要發(fā)送廣播數(shù)據(jù)報,必須告訴內(nèi)核,可以通過設(shè)置SO_BROADCAST套接口選項來做到這一點。inton=1;setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int));廣播實例服務(wù)端為tserv.c,運(yùn)行時需指定廣播地址和端口號,運(yùn)行后每3秒發(fā)送一次廣播,將本機(jī)時間通知本子網(wǎng)內(nèi)所有主機(jī)。服務(wù)器端程序tserv.c#include<sys/socket.h>#include<arpa/inet.h>#include<sys/ioctl.h>#include<stdio.h>#defineBUFLEN255voidgetcurtime(char*curtime){time_ttm;time(&tm);snprintf(curtime,BUFLEN,"%s\n",ctime(&tm));}intmain(intargc,char**argv){structsockaddr_inpeeraddr;intsockfd,on=1;intnum,i;charmsg[BUFLEN+1];if(argc!=3){printf("usage:%s<ipaddress><port>\n",argv[0]);exit(0);}sockfd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd<0){fprintf(stderr,"socketcreatingerrorintserv.c\n");exit(1);}setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int));memset(&peeraddr,0,sizeof(structsockaddr_in));peeraddr.sin_family=AF_INET;if(inet_pton(AF_INET,argv[1],&peeraddr.sin_addr)<=0){printf("WrongdestIPaddress\n");exit(0);}peeraddr.sin_port=htons(atoi(argv[2]));for(;;){getcurtime(msg);inta;a=sendto(sockfd,msg,strlen(msg),0,(structsockaddr*)&peeraddr,sizeof(structsockaddr_in));printf("%d",a);fflush(stdout);sleep(3);}客戶端程序tcli.c(只需偵聽某一固定端口的數(shù)據(jù)報,接收一個數(shù)據(jù)報就返回。)#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<stdio.h>#defineBUFLEN255intmain(intargc,char**argv){structsockaddr_inlocaladdr;intsockfd,n;charmsg[BUFLEN+1];if(argc!=2){printf("usage:%s<port>\n",argv[0]);exit(0);}sockfd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd<0){fprintf(stderr,"socketcreatingerrorintcli.c\n");exit(1);}memset(&localaddr,0,sizeof(structsockaddr_in));localaddr.sin_port=htons(atoi(argv[1]));localaddr.sin_addr.s_addr=htonl(INADDR_ANY);intopt=SO_REUSEADDR;setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));if(bind(sockfd,(structsockaddr*)&localaddr,sizeof(structsockaddr_in))<0){fprintf(stderr,"binderrorintcli.c\n");exit(2);}n=read(sockfd,msg,BUFLEN);if(n==-1){fprintf(stderr,"readerrorintcli.c\n");exit(3);}else{msg[n]=0;printf("%s",msg);}}程序運(yùn)行結(jié)果如果在服務(wù)器端輸入./serv222.18.113.1711234則兩個客戶不會同時收到數(shù)據(jù)報。多播多播是通過D類地址進(jìn)行的,D類地址的前4位為1110,后面28位為群播的組標(biāo)識。地址范圍224.0.0.0到239.255.255.255特殊的IPv4多播地址:224.0.0.0保留224.0.0.1本子網(wǎng)上所有主機(jī)224.0.0.2本子網(wǎng)上所有網(wǎng)關(guān)224.0.1.1NTP(網(wǎng)絡(luò)時間協(xié)議)組多播的原理當(dāng)一個多播分組到達(dá)一個以太網(wǎng)時,形成幀后它的MAC地址為01:00:5e:xx:xx:xx,其后23位由多播組標(biāo)識的后23位映射而成。例如目的地址為224.0.1.1的多播分組,在以太網(wǎng)上幀的MAC地址就為01:00:5e:00:01:01,如下圖示。11100000000000000000000100000001000000010000000001011110000000000000000100000001IP地址MAC地址由于多播IP地址中組標(biāo)識有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層來檢驗到達(dá)的多播分組是否是自已所加入的多播組。如果不是,則拋棄該分組。應(yīng)用程序UDPIP層132.0.0.100數(shù)據(jù)鏈路層52:37:4a:6d:7f:5e應(yīng)用程序UDPIP層132.0.0.129應(yīng)用程序UDPIP層132.0.0.168數(shù)據(jù)鏈路層52:23:4e:6f:2c:35數(shù)據(jù)鏈路層00:2e:2c:5f:ae:3f發(fā)送數(shù)據(jù)報IP:224.0.1.1端口1234通過ARP解析224.0.1.1對應(yīng)01:00:5e:00:01:01接收數(shù)據(jù)報端口1234應(yīng)用程序指定132.0.0.129加入多播組224.0.1.1IP層指示接收MAC地址為01:00:5e:00:01:01的幀加入225.0.1.1丟棄多播數(shù)據(jù)報在子網(wǎng)中的發(fā)送接收多播的實現(xiàn)
應(yīng)用程序只需向多播組地址發(fā)送數(shù)據(jù)報,接收應(yīng)用程序加入這個多播組。在指定端口上進(jìn)行偵聽。加入多播組的方法是設(shè)置套接口選項IP_ADD_MEMBERSHIP.它要用要如下結(jié)構(gòu):Structip_mreq{structin_addrimr_multiaddr;/*IPv4的D類多播地址*/Structin_addrimr_interface;/*本地接口IPv4地址*/};例:setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mcaddr,sizeof(structip_mreq))多播的實現(xiàn)服務(wù)器端程序沒有什么改變,只要將設(shè)置socket選項SO_BROADCAST的那行去掉就可以了。客戶程序源碼如下頁:源程序mtcli.c#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<stdio.h>#defineBUFLEN255intmain(intargc,char**argv){structsockaddr_inlocaladdr;intsockfd,n;structip_mreqmcaddr;charmsg[BUFLEN+1];if(argc<3){printf("usage:%s<multicast><port>\n",argv[0]);exit(0);}sockfd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd<0){fprintf(stderr,"socketcreatingerrorintcli.c\n");exit(1);}memset(&localaddr,0,sizeof(structsockaddr_in));localaddr.sin_port=htons(atoi(argv[2]));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,argv[1],&mcaddr.imr_multiaddr)<=0){printf("WrongmulticastIPaddress\n");exit(0);}printf("ip:%s",inet_ntoa(mcaddr.imr_multiaddr));fflush(stdout);if(setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mcaddr,sizeof(structip_mreq))<0){perror("setsockopterrorinmtcli.c,joinmulticastfailed\n");exit(4);}if(bind(sockfd,(structsockaddr*)&localaddr,sizeof(structsockaddr_in))<0){
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年上教版九年級地理上冊月考試卷
- 2025年人教新起點九年級歷史上冊月考試卷含答案
- 2025年度產(chǎn)業(yè)園企業(yè)入駐節(jié)能減排技術(shù)應(yīng)用合同4篇
- 二零二五版港口碼頭堆場租賃及貨物跟蹤信息服務(wù)協(xié)議4篇
- 2025年浙教版九年級地理上冊月考試卷含答案
- 2025年滬教版九年級地理上冊月考試卷含答案
- 專業(yè)牛肉貿(mào)易協(xié)議范例(2024修訂版)版
- 網(wǎng)絡(luò)安全教育與培訓(xùn)模式-洞察分析
- 2025年度健康養(yǎng)生產(chǎn)品全國總經(jīng)銷合作協(xié)議4篇
- 2025年滬教版七年級化學(xué)下冊階段測試試卷含答案
- 高二物理競賽霍爾效應(yīng) 課件
- 金融數(shù)學(xué)-(南京大學(xué))
- 基于核心素養(yǎng)下的英語寫作能力的培養(yǎng)策略
- 現(xiàn)場安全文明施工考核評分表
- 亞什蘭版膠衣操作指南
- 四年級上冊數(shù)學(xué)教案 6.1口算除法 人教版
- DB32-T 3129-2016適合機(jī)械化作業(yè)的單體鋼架塑料大棚 技術(shù)規(guī)范-(高清現(xiàn)行)
- 6.農(nóng)業(yè)產(chǎn)值與增加值核算統(tǒng)計報表制度(2020年)
- 人工挖孔樁施工監(jiān)測監(jiān)控措施
- 供應(yīng)商物料質(zhì)量問題賠償協(xié)議(終端)
- 物理人教版(2019)必修第二冊5.2運(yùn)動的合成與分解(共19張ppt)
評論
0/150
提交評論