您的位置:首页 > 理论基础 > 计算机网络

33 网络相关函数(一)——live555源码阅读(四)网络

2015-08-12 13:31 483 查看

33 网络相关函数(一)——live555源码阅读(四)网络

33 网络相关函数(一)——live555源码阅读(四)网络

简介

1)IsMulticastAddress多播(组播)地址判断函数

多播简要说明

多播编程简述

1.流程

2.多播程序设计使用setsockopt()函数和getsockopt()函数来实现,组播的选项是IP层的。

3.setsockopt()的选项

实例:

本文由乌合之众 lym瞎编,欢迎转载
blog.cnblogs.net/oloroso


本文由乌合之众 lym瞎编,欢迎转载
my.oschina.net/oloroso


简介

网络相关函数是一系列用于操作网络数据的函数。在多个文件中都有相关的函数的定义。还有一些函数是系统
socket API
相关函数,就不提了。

   这一系列的函数大多有一个特点,需要一个UsageEnvironmet&型的参数。

   这些方法大多在
live555sourcecontrol\groupsock\include\GroupsockHelper.hh
中声明。

1)IsMulticastAddress多播(组播)地址判断函数

IsMulticastAddress
用于判断一个地址是否为多播(组播)地址,如果是的话返回
true
,否则返回
false


声明在文件
live555sourcecontrol\groupsock\include\NetAddress.hh


   有些应用会有这样的要求:一些分布在各处的进程需要以组的方式协同工作,组中的进程通常要给其他所有的成员发送消息。即有这样的一种方法能够给一些明确定义的组发送消息,这些组的成员数量虽然很多,但是与整个网络规模相比却很小。给这样一个组发送消息称为多点点播送,简称多播。

/ 判断参数释放是一个多播地址
Boolean IsMulticastAddress(netAddressBits address) {
// Note: We return False for addresses in the range 224.0.0.0
// through 224.0.0.255, because these are non-routable
// 注意:我们在224.0.0.0到224.0.0.255范围地址返回false,因为这些是不可路由的
// Note: IPv4-specific #####
// 注:支持IPv4特定#####
netAddressBits addressInNetworkOrder = htonl(address);
return addressInNetworkOrder > 0xE00000FF &&
addressInNetworkOrder <= 0xEFFFFFFF;
}

多播简要说明

IP多播
(也称多址广播或组播)技术,是一种允许一台或多台主机(多播源)发送单一数据包到多台主机(一次的,同时的)的
TCP/IP
网络技术。多播作为一点对多点的通信,是节省网络带宽的有效方法之一。在网络音频/视频广播的应用中,当需要将一个节点的信号传送到多个节点时,无论是采用重复点对点通信方式,还是采用广播方式,都会严重浪费网络带宽,只有多播才是最好的选择。多播能使一个或多个多播源只把数据包发送给特定的多播组,而只有加入该多播组的主机才能接收到数据包。目前,IP多播技术被广泛应用在网络音频/视频广播、AOD/VOD、网络视频会议、多媒体远程教育、
“push”
技术(如股票行情等)和虚拟现实游戏等方面。

IP多播通信
必须依赖于
IP多播地址
,在
IPv4
中它是一个
D
类IP地址,范围从
224.0.0.0
239.255.255.255
,并被划分为局部链接多播地址、预留多播地址和管理权限多播地址三类。其中,局部链接多播地址范围在224.0.0.0~224.0.0.255,这是为路由协议和其它用途保留的地址,路由器并不转发属于此范围的IP包;预留多播地址为
224.0.1.0~238.255.255.255
,可用于全球范围(如Internet)或网络协议;管理权限多播地址为
239.0.0.0~239.255.255.255
,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。

   使用同一个IP多播地址接收多播数据包的所有主机构成了一个主机组,也称为多播组。一个多播组的成员是随时变动的,一台主机可以随时加入或离开多播组,多播组成员的数目和所在的地理位置也不受限制,一台主机也可以属于几个多播组。此外,不属于某一个多播组的主机也可以向该多播组发送数据包。

多播编程简述

1.流程

1>建立一个
socket
;

   2>设置多播的参数,例如超时时间
TTL
,本地回环许可
LOOP


   3>加入多播组

   4>发送和接收数据

   5>从多播组离开



2.多播程序设计使用
setsockopt()
函数和
getsockopt()
函数来实现,组播的选项是IP层的。

3.
setsockopt()
的选项

1>IP_MULTICAST_TTL:设置多播组数据的TTL值(路由跳数),每跨过一个路由器,TTL值减一.范围为0~255之间的任何值。

int  ttl;
setsockopt(sock_fd,IPPROTO_IP,IP_MULTICAST_TTL,&ttl,sizeof(ttl));

2>
IP_MULTICAST_LOOP
:默认情况下,当本机发送组播数据到某个网络接口时,在IP层,数据会回送公道本地的回环接口,选项
IP_MULTICAST_LOOP
用于控制数据是否回送到本地的回环接口。

int  loop;
setsockopt(sock_fd,IPPROTO_IP,IP_MULTICAST_LOOP,&loop,sizeof(loop));

参数
loop
设置为
0
表示禁止回送,设置为
1
允许回送。

3>
IP_ADD_MEMBERSHIP
: 该选项通过对一个结构struct ip_mreq类型的变量进行控制而加入一个多播组。

struct ip_mreq
{
struct in_addr imr_multiaddr;/*加入的多播组IP地址*/
struct  in_addr imr_interface;/*加入的网络接口IP地址*/
};

选项
IP_ADD_MEMBESHIP
选项用于加入某个多播组,之后就可以向这个多播组发送数据或者从多播组接收数据。此选项的值为
mreq
结构,成员
imr_multiaddr
是需要加入的
多播组IP地址
,成员
imr_interface
是本机需要加入多播组的网络接口
IP
地址。

struct ip_mreq  mreq;
setsockopt(sock_fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));

使用
IP_ADD_MEMBERSHIP
选项每次只能加入一个网络接口的
IP
地址到多播组,但并不是一个多播组
仅允许一个
主机IP地址加入,可以多次调用
IP_ADD_MEMBERSHIP
选项来实现多个IP地址加入同一个多播组,或者同一个IP地址加入多个多播组。当
imr_interface
INADDR_ANY
时,选择的本地默认网口。

4>
IP_DROP_MEMBERSHIP
:该选项用于从一个多播组中退出。

struct ip_mreq  mreq;
setsockopt(sock_fd,IPPROTP_IP,IP_DROP_MEMBERSHIP,&merq,sizeof(sreq));

实例:

情景:

服务器端每隔2秒向目的端口号为5000和目的多播地址为224.0.0.255发送数据welcome you to multicast socket programme。

客户端从多播地址为224.0.0.255和端口号5000处接收5次多播数据。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: