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次多播数据。
相关文章推荐
- 一个简单的wed服务器SHTTPD(1)————命令行和文件配置解析
- Asp.Net customErrors与httpErrors的区别
- linux 服务器/客户端 tcp通信的简单例子
- NM常用网络命令
- Http 和 Https 访问请求
- HttpURLConnection&HttpClient网络通信
- Dynamic Adaptive Streaming ove HTTP(DASH) Design Principles and Standards
- Dynamic Adaptive Streaming over HTTP Dataset
- HttpWebRequest抓取网页内容与直接输入URL得到的内容不一致!球大神帮忙!!
- POJ 2396 Budget(无源汇网络有上下界的可行流-Dinic)
- 通过端口1433连接到主机127.0.0.1的 TCP/IP 连接失败,错误:“connect timed out”的解决方法
- Http协议学习(1)
- ntp时间服务器以及虚拟机同步网络时间
- Volley发送简单的网络请求(Sending a Simple Request)
- Android 使用 HttpClient 进行网络通信,包括Get方式和Post方式(转)
- http状态码
- http请求部分常见的状态码
- UI 网络请求协议 NSURLConnectionDataDelegate
- 关于HttpClient在服务器端使用请求碰到的问题总结
- 网络图片下载到手机返回null的问题解决方法