LoveUnix » 编程开发 & Rational » 请教:关于组播编程
让LU留住您的每

一天 让LU博客留住您的每一天
2006-12-2 10:49 wanghun
请教:关于组播编程

[size=13px]我的操作系统:redhat9.0
内核版本:2.4.20-8

请问以下程序是真正意义上的组播吗?底层用的是IGMP协议么?
我的组播程序如下(简化版):
send_sockfd=socket(AF_INET,SOCK_DGRAM,0);           //创建udp套接字
bzero(&mcast_addr,sizeof(struct sockaddr_in));          //清空地址结构,初始化
mcast_addr.sin_family=AF_INET;                                 //设置地址簇
inet_pton(AF_INET, "234.1.1.13", &mcast_addr.sin_addr); //设置组播地址
mcast_addr.sin_port=htons(1234);                             //设置组播端口
//设置套接口为组播套接口
setsockopt(send_sockfd, IPPROTO_IP,IP_MULTICAST_LOOP,(u_char*)0,sizeof(u_char));
//组播发送数据
sendto( send_sockfd, buf, bufSize, 0, (struct  sockaddr *)&mcast_addr, sizeof(struct sockaddr)));

另:rh9支持PIM-SM协议吗? 如何对其编程,谢谢![/size]

2006-12-3 22:01 sinister
你贴的代码只是一个发送端程序,设置 IP_MULTICAST_LOOP 只是让发送数据时 环路 会
有一个备份(一般为了单机测试,也会在接收端设置这个选项)。
接受端首先要正确设置 struct ip_mreq 结构,后用 setsockopt() 设置
IP_ADD_MEMBERSHIP / IP_DROP_MEMBERSHIP 选项来加入/退出组播环境,才可接收
到组播数据。还有组播对地址的使用也有一定要求。关于 IGMP 可以参照 RFC 1112 和
RFC 2236

2006-12-11 08:51 wanghun
谢谢回复。
linux内核选项中有IGMP v1, IGMP v2, PIM-SM等祖播协议可以选择,默认安装时,
内核配置项这些协议都是Y,也就是说内核都支持这些协议,
但是在上层使用组播API编写程序,如何能知道执行你的程序的时候,
系统使用的是哪个协议阿?谢谢

2006-12-31 11:38 xuxuzhou
又学了一招。

页: [1]
查看完整版本: 请教:关于组播编程


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.