版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.概念单播是用于两个主机之间传送数据,广播是一个主机对局域网内的所有主机发送数据。而多播,又称为组播,它是对一组特定的主机通信。将网络上同一类型业务逻辑上分组,只和组内的成员通信,其它主机没有加入组则不能通信。与单播相同的是,组播允许在Internet上通信,而广播只是同一局域网内的主机通信。组播地址是特定的,D类地址用于组播,即244.0.0.0到239.255.255.255.并划分为局部连接多播地址,预留多播地址和管理权限多播地址3类。(1)局部多播地址(224.0.0.-224.0.0.255)为路由协议和其它用途保留的地址,路由器不转发此范围的IP包(2)预留多播地址(224.0.1
2、.0-238.255.255.255)可用于全球范围内或网络协议管理权限的多播(239.0.0.0-239.255.255.255)可供组织内使用,类型于私有IP,不用于Internet,可限制多播范围多播套接字设置可用setsockopt或getsockopt设置或得到多播选项.常用的多播选项如下所示:IP_MULTICAST_TTL设置多播的TTL值IP_MULTICAST_IF获取或设置多播接口IP_MULTICAST_LOOP禁止多播数据回送到本地loop接口IP_ADD_MEMBERSHIP将指定的接口加入多播IP_DROP_MEMBERSHIP退出多播组structip_mreqs
3、tructin_addhmn_multicastaddr;/多播组地址structin_addhmrJnterface;/加入的接口的IP地址intttl=255;setsockopt(s,IPPROTO_RIP_MULTICAST_TTL,&ttl,sizeof(ttl);/设置跳数s-套接字描述符PROTO_IP-选项所在的协议层IP_MULTICAST_TTL-选项名&ttl-设置的内存缓冲区sizeof(ttl)-设置的内存缓冲区长度structin_addrin;setsockopt(s,IPPROTO_RIP_MUTLICAST_IF,&in,sizeof(in);/设置组播接口i
4、ntyes=1;setsockopt(s,IPPROTO_RIP_MULTICAST_LOOF,&yes,sizeof(yes);/设置数据回送到本地回环接口structip_mreqaddreq;setsockopt(s,IPPROTO_IPJP_ADD_MEMBERSHR&req,sizeof(req);/加入组播组structip_mreqdropreq;setsockopt(s,IPPROTO_ipiP_DROP_MEMBERSHIB&dropreq,sizeof(dropreq);/离开组播组多播程序的设计流程建立socket设置TTL值IP_MULTICAST_TTL(3)设置是否
5、允许本地回环IP_MULTICAST_LOOP(4)加入多播组IP_ADD_MEMBERSHIP(5)发送数据send(6)接收数据recv(7)退出多播组IP_DROP_MEMBERSHIP注意:TCP协议也不能用于多播.多播实例服务器端不停的向加入多播组的主机发送数据.服务器:#include#include#include#include#include#include/*广播与多播只支持UDP协议,因为TCP协议是端到端,这与广播与多播的理念相冲突广播是局域网中一个主机对所有主机的数据通信,而多播是一个主机对一组特定的主机进行通信.多播可以是因特网,而广播只能是局域网。多播常用于视频电
6、话,网上会议等。setsockopt设置套接字选项可以设置多播的一些相关信息IP_MULTICAST_TTL/设置多播的跳数值IP_ADD_MEMBERSHIP/将主机的指定接口加入多播组,以后就从这个指定的接口发送与接收数据IP_DROP_MEMBERSHIP/主机退出多播组IP_MULTICAST_IF/获取默认的接口或设置多播接口IP_MULTICAST_LOOP/设置或禁止多播数据回送,即多播的数据是否回送到本地回环接口structip_mreqstructin_add门mn_multicastaddr;/多播组地址structin_addhmrJnterface;/加入的接口的IP地
7、址例子:intttl=255;setsockopt(s,IPPROTO_IBIP_MULTICAST_TTL,&ttl,sizeof(ttl);/设置跳数s-套接字描述符PROTO_IP-选项所在的协议层IP_MULTICAST_TTL-选项名&ttl-设置的内存缓冲区sizeof(ttl)-设置的内存缓冲区长度structin_addrin;setsockopt(s,IPPROTO_RIP_MUTLICAST_IF,&in,sizeof(in);/设置组播接口intyes=1;setsockopt(s,IPPROTO_RIP_MULTICAST_LOOR&yes,sizeof(yes);/设
8、置数据回送到本地回环接口structip_mreqaddreq;setsockopt(s,IPPROTO_IPJP_ADD_MEMBERSHR&req,sizeof(req);/加入组播组structip_mreqdropreq;setsockopt(s,IPPROTO_RIP_DROP_MEMBERSHR&dropreq,sizeof(dropreq);/离开组播组组播程序的设计流程:建立socket设置跳数TTL(3)设置是否允许本地回环(4)加入组播组(5)发送数据(6)接收数据(7)离开多播组(8)关闭套接字*/服务器实现向多播组发送数据#defineMCAST_PORT8888#de
9、fineMCAST_ADDR224.0.0.88intmain(intargc,char*argv)intret;ints;inti=1;structsockaddr_inMulti_addr;/多播地址structsockaddr_inclient_addr;s=socket(AF_INET,SOCK_DGRAM,0);/建立数据报套接字if(s0)perror(socketerror);return-1;Multi_addr.sin_family=AF_INET;Multi_addr.sin_port=htons(MCAST_PORT);/多播端口Multi_addr.sin_addr.s
10、_addr=inet_addr(MCAST_ADDR);/序播地址/向多播组发送数据charbuffer1024;for(;)memset(buffer,0,sizeof(buffer);sprintf(buffer,%d,i);intsize=sendto(s,buffer,strlen(buffer),0,(structsockaddr*)&Multi_addr,sizeof(Multi_addr);if(size0)perror(sendtoerror);sleep(1);i+;memset(buffer,0,sizeof(buffer);intlen=sizeof(client_add
11、r);size=recvfrom(s,buffer,1024,0,(structsockaddr*)&client_addr,&len);write(1,buffer,size);close(s);加入多播组的主机:#include#include#include#include#include#include/多播的客户端程序#definePORT8888#defineMCAST224.0.0.88intmain(intargc,char*argv)ints;intret;intsize;intttl=10;/如果转发的次数等于10,则不再转发intloop=0;inttimes=0;cha
12、rbuffer1024;structsockaddr_inlocaladdrfromaddr;/多播地址结构/建立套接字s=socket(AF_INET,SOCK_DGRAM,0);if(s0)perror(socketerror);return-1;/多播的地址结构localaddr.sin_family=AF_INET;localaddr.sin_port=htons(PORT);/多播端口号localaddr.sin_addr.s_addr=htonl(INADDR_ANY);/接收任意地址发送的数据/绑定地址结构到套接字ret=bind(s,(structsockaddr*)&loca
13、laddr,sizeof(localaddr);/客户端需要绑定端口,用来接收服务器的数据,得指定接收端口,因为数据先从服务器发送过来的if(ret0)perror(binderror);return-1;/设置多播的TTL值if(setsockopt(s,IPPROTO_IP,IP_MULTICAST_TTL,&ttl,sizeof(ttl)0)perror(IP_MULTICAST_TTL);return-1;/设置数据是否发送到本地回环接口if(setsockopt(s,IPPROTO_IP,IP_MULTICAST_LOOP,&loop,sizeof(loop)0)perror(IP_
14、MULTICAST_LOOP);return-1;/客户端加入多播组structip_mreqmreq;mreq.imr_multiaddr.s_addr=inet_addr(MCAST);/多播组的IPmreq.imr_interface.s_addr=htonl(INADDR_ANY);/本机的默认接口IPif(setsockopt(s,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)0)perror(IP_ADD_MEMBERSHIP);return-1;/循环接收多播组的消息,5次退出for(times=0;times20;times+)intlen=sizeof(fromaddr);memset(buffer,0,sizeof(buffer);size=recvfrom(s,buffer,1024,0,(structsockaddr*)&fromaddr,&len);if(size0)perror(recvfrom);return-1;printf(receivemessage:%sn,buffer);printf(Portis:%dn,fromaddr.sin_port);size=sendto(s,OK,2,0,(structsockaddr*)&fromaddr,si
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027年劳动合同模板二篇
- 2027年劳务合同属于劳动合同二篇
- 2027年合同赔偿风险二篇
- 合规转利润:降本增效全指南(2026)《GBT 35915-2018化妆品用原料 珍珠提取物》
- 《用百分数解决问题-求百分率(复习课)》教学设计
- 《练习5》教学设计
- 烟叶调制员发展趋势强化考核试卷含答案
- 刨花制备工岗前工作改进考核试卷含答案
- 农机修理工标准化知识考核试卷含答案
- 木焦油工岗前安全文明考核试卷含答案
- 加油站操作员岗中安全风险考核试卷含答案
- 2026年成考专升本政治时政必考试题及答案
- 2026年广东省中考数学试卷(含详细答案解析)
- 新学期(2026年秋)高中班主任工作计划
- 2026监理员继续教育考试题库及答案
- 2026年金融专业测试题目及答案
- 工程材料检测方案
- (2026年)BTF指南:穿透性创伤性脑损伤的管理(第2版)解读课件
- 招标代理及造价咨询服务方案投标文件(技术标)
- 口腔科各种工作制度
- 中国银行考试笔试真题及答案
评论
0/150
提交评论