免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 766 | 回复: 0
打印 上一主题 下一主题

Linux多播技术的使用和编程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-23 11:06 |只看该作者 |倒序浏览

                纲要:
  多播技术(Multicast)常常用来编制分布式的聊天、流体音频,和视频等等应用
程序。在Linux中使用多播技术,与使用UDP给单个用户发送消息,没有多大的区别,只
是你要使用一个特殊的多播IP地址,还有一些环境需要改变一下。
正文:
                         Linux多播技术的使用和编程
作者:stone
  多播技术(Multicast)常常用来编制分布式的聊天、流体音频,和视频等等应用程
序。在Linux中使用多播技术,与使用UDP给单个用户发送消息,没有多大的区别,只是
你要使用一个特殊的多播IP地址,还有一些环境需要改变一下。
  一般的网卡,都是支持多播技术的,但是操作系统不一定。Linux一般在缺省状态编
译时,可能都不支持Multicast,你需要从新配置和编译你的内核,使它支持多播,然后
你需要使用类似这样的命令:
route add -net 224.0.0.0 netmask 240.0.0.0 dev lo
  要编译和配置内核,只是在配置的网络部分选项中选中:enable multicast ip,然
后编译,编辑lilo的配置文件lilo.conf,就可以搞定。
  在使用多播技术时,除了通常使用的socket函数外,还需要使用getsockopt()和se
tsockopt() 来支持multicast。你可以运行“man multicast”,看看它的各种选项。编
制多播的程序,也分为两方面,一个是broadcast data的服务程序,另一个是监听mult
icast ip 广播数据的客户端程序。
  服务程序的编制和普通UDP服务程序的编制一样,只是在你的sockaddr_in结构的初
始化时,赋值给它的sin_addr。s_addr使用inet_addr("224.0.0.1")给一个特殊的Muti
cast IP值就可以了。
  在客户端的编制方面,相对复杂一点。一般我们需要先使用gethostbyname,得到服
务器的信息。然后使用socket(AF_INET,SOCK_DGRAM,0)建立套接字,我们接着调用 set
sockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&share,sizeof(share)),其中,char shar
e = 1, sockfd是socket建立的套接字,这一步就是允许了多进程共享同一个端口。接着
,是通用的bzero(), 给sockaddr_in填入信息,bind(),下来,我们要通知Linux kerne
l来的数据是广播数据,这一步通过给optval付值来搞定,如 optval.imr_multiaddr.s
_addr = inet_addr("224.0.0.1"); optval.imr_interface.s_addr = htonl(INADDR_A
NY); 先面的这一步,则用来使自己的主机加入一个广播组: setsockopt(sockfd, IPP
ROTO_IP, IP_ADD_MEMBERSHIP, &optval, sizeof(command)); 现在,你可以使用recvf
rom()来接收多播数据了,当然,最后你还要使用: setsockopt(sockfd, IPPROTO_IP,
IP_DROP_MEMBERSHIP, &optval, sizeof(optval)); 来退出多播组。
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93926/showart_1872739.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP