当前位置: 首页 > news >正文

网站改版影响排名成都旧房改造装修公司哪家好

网站改版影响排名,成都旧房改造装修公司哪家好,物流企业网站,官方设计方案目录 1. 多播 1.1 多播的使用情形 1.2 多播的原理 1.3 如何实现多播 1.4 多播的代码实现 2. 广播 2.1 广播与多播的区别 2.2 广播的分类 2.3 实现广播 1. 多播 1.1 多播的使用情形 考虑一种情形,你要向10000名用户发送数据,此时如果用TCP提供服…

目录

1. 多播

1.1 多播的使用情形

1.2 多播的原理

1.3 如何实现多播

1.4 多播的代码实现

2. 广播

2.1 广播与多播的区别

2.2 广播的分类

2.3 实现广播


1. 多播

1.1 多播的使用情形

        考虑一种情形,你要向10000名用户发送数据,此时如果用TCP提供服务,则需要维护10000个套接字连接,如果用UDP提供服务,则也需要进行10000次数据传输。像这样,在这总情况下,就可以使用多播技术来解决问题。所以一般多播常用于多媒体数据的实时传输

1.2 多播的原理

        多播是基于UDP协议传输的。但又与UDP有一些不同,不同之处在于,UDP数据传输是以单一目标进行的,而多播则会将数据同时传递到加入(注册)多播组的大量主机。

        其中,多播组是一种D类IP地址(224.0.0.0~239.255.255.255),加入多播组,可以理解为在D类IP地址中,我希望接收发往目标239.255.255.255的多播数据。

        其原理如图:

多播数据包的格式与UDP数据包相同,但多播数据包在传输过程中时,路由器会复制该多播数据包并传递到多个主机。由此,主机只需要发送一次数据包,多个主机就能接受到,而无需一个数据包发多次。不像UDP或TCP,n个主机要接受数据包,就得传输n次。

1.3 如何实现多播

实现多播需要:

        1.传递数据包的主机需要设置TTL(Time to Live,生存时间),TTL是决定数据包传送距离的主要因素,TTL用整数表示,每经过一个路由器就减1,直到TTL变为0时,数据包就无法再传输,只能销毁。因此TTL的值设置过大会影响网络流量,但过小就无法传递到目标。

        2.接收数据包的主机需要加入多播组

上述两个条件的设置,用套接字可选项来完成。

条件协议层可选项
设置TTLIPPROTO_IPIP_MULTICAST_TTL
加入多播组IPPROTO_IPIP_ADD_MEMBERSHIP

1.4 多播的代码实现

设置TTL:

int time_to_live=64;
setsockopt(senderfd,IPPROTO_IP,IP_MULTICAST_TTL,(void*)&time_to_live,sizeof(time_to_live);

加入多播组:

ip_mreq join_adr;
join_adr.imr_multiaddr=inet_addr("要加入的多播组IP地址");
join_adr.imr_interface=htonl("加入该组的套接字所属主机的IP地址");setsockopt(recvfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,(void*)&join_adr,sizeof(join_adr));
struct ip_mreq
{struct in_addr imr_multiaddr;    //要加入的多播组IP地址struct in_addr imr_interface;    //加入该组套接字所属主机IP
}

其中,imr_interface可以用INADDR_ANY

Sender:

#include<iostream>
#include<cstring>
#include<sys/socket.h>
#include<unistd.h>
#include<arpa/inet.h>int main()
{int senderfd=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);if(senderfd==-1){std::cout<<"socket fail!"<<std::endl;}int ttl=64;int res=setsockopt(senderfd,IPPROTO_IP,IP_MULTICAST_TTL,(void*)&ttl,sizeof(ttl));if(res==-1){std::cout<<"setsockopt fail!"<<std::endl;}std::string strIp;std::cout<<"请输入要发往的多播IP地址:";std::cin>>strIp;sockaddr_in senderAddr;senderAddr.sin_family=AF_INET;senderAddr.sin_addr.s_addr=inet_addr(strIp.c_str());senderAddr.sin_port=htons(9130);std::cout<<"请输入你要发送的内容:";char buff[1024];std::cin>>buff;int sendLen;sendto(senderfd,buff,sizeof(buff),0,(sockaddr*)&senderAddr,sizeof(senderAddr));close(senderfd);return 0;
}

Recv:

#include<iostream>
#include<cstring>
#include<sys/socket.h>
#include<unistd.h>
#include<arpa/inet.h>int main()
{int recvSocket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);if (recvSocket == -1){std::cout << "socket fail!" << std::endl;}sockaddr_in recvAddr;recvAddr.sin_family = AF_INET;recvAddr.sin_addr.s_addr = htonl(INADDR_ANY);recvAddr.sin_port = htons(9130);if (-1 == bind(recvSocket, (sockaddr*)&recvAddr, sizeof(recvAddr))){std::cout << "bind fail!" << std::endl;}std::string strIp;std::cout << "请输入要加入的多播IP地址:";std::cin >> strIp;ip_mreq join_adr;join_adr.imr_multiaddr.s_addr = inet_addr(strIp.c_str());join_adr.imr_interface.s_addr = htonl(INADDR_ANY);int res=setsockopt(recvSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void*)&join_adr, sizeof(join_adr));if (res ==-1){std::cout << "setsockopt fail!" << std::endl;}char buff[1024];recvfrom(recvSocket, buff, sizeof(buff), 0, NULL, 0);    //因为此套接字是已连接UDP套接字,所以无需再进行绑定std::cout <<"接收到的多播信息:" << buff << std::endl;close(recvSocket);return 0;
}

运行结果:

Sender:

Recv:

注意:

1.发送方和接收方的端口号要一致

2.在这里接收方要先于发送方运行,因为多播属于广播的范畴,如果接收方延后,则会接收不到信息。
3.Windows里设置TTL,需要加上头文件#include<ws2tcpip.h>,因为IP_MULTICAST_TTL声明在这个头文件里。

2. 广播

2.1 广播与多播的区别

广播与多播的唯一区别是,广播只能向同一网络中的主机传输数据,而多播是可以跨越不同网络,只要加入多播组就能接收到数据的。

2.2 广播的分类

广播分为:直接广播、本地广播。

两者之间的差别主要是在于IP地址

        直接广播的IP地址除了网络地址外,其余主机地址全部设置为1,。例如,希望向网络地址为192.12.32中的所有主机传输数据,则可以向192.12.32.255传输。换言之,直接广播就是可以向特定区域内所有主机传输数据。

         本地广播的IP地址限定为255.255.255.255。例如,位于192.32.24网络中的主机向255.255.255.255传递数据时,数据将传递到这个网路中的所有主机上。换言之,本地广播就是只能向本地网络区域内所有主机传输数据。

2.3 实现广播

广播的实现需要:

协议层套接字可选项
SOL_SOCKETSO_BROADCAST0【关闭】/1【开启】
int bcast=1;
setsockopt(send_sock,SOL_SOCKET,SO_BROADCAST,(void*)&bcast,sizeof(bcast));

广播的代码实现和多播没有什么区别,只需要把上述代码里套接字可选项改为SO_BROADCAST即可,然后在运行时,输入指定的IP地址(直接广播输入:xxx.xxx.xxx.255,本地广播输入:255.255.255.255)即可。

http://www.yayakq.cn/news/424919/

相关文章:

  • 惠州做网站多少钱太原市建设工程安全监督站网站
  • 具备网站维护与建设能力网站开发开始阶段的主要任务包括( )。
  • 网站主体备案号什么网站免费做推广
  • 做网站的厉害还是黑网站的厉害广州:推动优化防控措施落
  • 北京做的比较好的网站公司新乡市网站建设有哪些公司
  • 樟树市建设局网站企业名录下载
  • 网站开发职业前景评估一个虚拟空间做两个网站
  • 湖南做网站 f磐石网络推广计划和推广单元什么区别
  • 做网站上传空间什么意思网站title keyword description
  • 网站设计的机构百度一直不收录网站
  • 国家商标查询官方网站偷的网站怎么做seo
  • 清廉医院建设网站网站设计目的怎么写
  • 做图表好用网站或软件网站建设对企业很重要
  • 如何制作课程网站模板下载地址室内设计师网名
  • 移动网站 模板电商运营的核心公式
  • 建行官网网站网页制作源代码
  • 网站开发技术发展历程室内设计效果图手绘图
  • 网站开发工作怎么样网站备案起名要求
  • 做设计什么设计比较好的网站wordpress安装路径
  • 响应式网站是做列表中国分类信息平台
  • asp.net 网站开发实例石龙网站开发
  • 聊城网站建设策划建设公司四川营销网站建设
  • 晋中网站建设哪家强产品开发流程文件
  • 网站推广的岗位要求商品网站建设方案
  • 网站设计工具更好的做网站wordpress博客占用cpu
  • 生成网站 目录徐州市建设局官方网站
  • 机械模板网站wordpress主题4mudi
  • 教育培训机构营销方案模版网站如何优化
  • 推广型网站建设电话c 网站开发流程
  • 找建设网站代理公司注册网