linux组播的设置

SnowWolf_zhijun 2011-10-27 11:53:31
大家好:
我刚开始学习组播的东西,组播的实现形式大致明白.
我从网上下了一个live555的测试程序,结果在运行的时候提示说:
# ./testH264VideoStreamer
Use: rtsp://192.168.2.203/PSIA/Streaming/channels/
22:37:34 Groupsock(5: 232.196.74.220, 18888, 255): failed to join group: setsockopt(IP_ADD_MEMBERSHIP) error: No such device
22:37:34 Groupsock(6: 232.196.74.220, 18889, 255): failed to join group: setsockopt(IP_ADD_MEMBERSHIP) error: No such device

我感觉是我组播的哪里没有设置好,我看了下防火墙也关闭了,用ifconfig打印信息如下:
[root@localhost testProgs]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:A8:2F:40
inet addr:192.168.8.108 Bcast:192.168.8.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fea8:2f40/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:452129 errors:0 dropped:0 overruns:0 frame:0
TX packets:492525 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:127646867 (121.7 MiB) TX bytes:437187389 (416.9 MiB)
Interrupt:75 Base address:0x2024
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1852 errors:0 dropped:0 overruns:0 frame:0
TX packets:1852 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4131392 (3.9 MiB) TX bytes:4131392 (3.9 MiB)

请问下,我的linux服务器组播开启了吗,如果没有的话,如何设置,谢谢!
...全文
1421 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
DIE654456 2011-10-28
  • 打赏
  • 举报
回复
socket创建UDP通信描述符后,setsockopt加入多播组,再bind绑定到该网卡上

//在指定的IP和端口上接收多播组的报文
int recv_msg(char *ip , unsigned short port , char *mult_ip )
{
//建立通讯套接字
int fd = socket( PF_INET , SOCK_DGRAM , 0 );
if( -1 == fd )
{
perror("socket failed");
return -1;
}

//设置地址重用和接收多播
{
int reuse = 1 ;
struct ip_mreqn mult_addr = {0};
mult_addr.imr_multiaddr.s_addr = inet_addr( mult_ip );
mult_addr.imr_address.s_addr = inet_addr( ip );

if( -1 == setsockopt( fd , IPPROTO_IP , IP_ADD_MEMBERSHIP ,
&mult_addr , sizeof(mult_addr)))
{
perror("setsockopt add failed");
goto _out;
}

if( -1 == setsockopt( fd , SOL_SOCKET, SO_REUSEADDR,
&reuse , sizeof(reuse) ) )
{
perror("setsockopt reuse failed");
}
}

//绑定地址和端口
{
struct sockaddr_in addr = {0};
addr.sin_family = PF_INET;
addr.sin_port = htons( port );
addr.sin_addr.s_addr = INADDR_ANY;
if( -1 == bind( fd , (struct sockaddr*)&addr ,
sizeof(addr) ) )
{
perror("bind failed");
goto _out;
}
}

//接收信息
while(1)
{
char buf[128] = {0};
int ret = 0 ;
struct sockaddr_in client_addr = {0};
int len = sizeof(client_addr) ;
ret = recvfrom( fd , buf , sizeof(buf), 0 ,
(struct sockaddr*)&client_addr ,
&len );
//被信号中断则重启
if( (-1 == ret)&&(EINTR ==errno ))
{
continue;
}
else if( -1 ==ret )
{
perror("recvfrom failed");
goto _out;
}
else if( ret >0 )
{
printf("%s\n" , buf );
}
usleep( 100*1000 );
}

_out:
if( fd >= 0)
{
close( fd );
}
return 0;
}
SnowWolf_zhijun 2011-10-28
  • 打赏
  • 举报
回复
谢谢,我们的redhat虚拟机可以使用 组播,因为我在网上下载了 周立发的 网络程序,测试过,可是使用的.
不过后来我把live555的程序交叉编译后 下载到hi3515的板子上后,发现也是打印出同样的错误.不知道为什么,谢谢!
Linux-Torvalds 2011-10-27
  • 打赏
  • 举报
回复
UP BROADCAST RUNNING MULTICAST
开启了。
DIE654456 2011-10-27
  • 打赏
  • 举报
回复
估计你是用了Vmware的虚拟机网卡。
如果是,用bridge模式的,而且要绑定到该网卡上,再setsockopt加入多播组
IterZebra 2011-10-27
  • 打赏
  • 举报
回复
mark 1 下
SnowWolf_zhijun 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 die654456 的回复:]
估计你是用了Vmware的虚拟机网卡。
如果是,用bridge模式的,而且要绑定到该网卡上,再setsockopt加入多播组
[/Quote]
谢谢大家:
不过我有一个HI3515的开发板,我把live555的程序交叉编译后,下载到板子上后发现,问题一样的,一样会打印出
:00:21:13 Groupsock(5: 232.226.170.247, 18888, 255): failed to join group: setsockopt(IP_ADD_MEMBERSHIP) error: No such device
00:21:13 Groupsock(6: 232.226.170.247, 18889, 255): failed to join group: setsockopt(IP_ADD_MEMBERSHIP) error: No such device
这个可是真是的系统,也有"UP BROADCAST RUNNING MULTICAST" 说明打印了相关信息的啊,
不明白 ,等高人啊!!!!!
qq120848369 2011-10-27
  • 打赏
  • 举报
回复
至今感觉组播变态。

23,114

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧