Linux多播技术的使用和编程

纲要:   多播技术(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)); 来退出多播组。
相关文章
相关标签/搜索