在所有接口上侦听多播
Listening to multicast on all interfaces
我有以下接口:
ifconfig
bond0 Link encap:Ethernet HWaddr 1C:C1:DE:1F:71:CA
inet addr:10.3.3.13 Bcast:10.3.3.255 Mask:255.255.255.0
inet6 addr: fe80::1ec1:deff:fe1f:71ca/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:39972916 errors:0 dropped:0 overruns:0 frame:0
TX packets:21849588 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:60630723698 (56.4 GiB) TX bytes:1570500163 (1.4 GiB)
eth0 Link encap:Ethernet HWaddr 1C:C1:DE:1F:71:CA
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:39959516 errors:0 dropped:0 overruns:0 frame:0
TX packets:21849585 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:60629214902 (56.4 GiB) TX bytes:1570499971 (1.4 GiB)
Interrupt:16 Memory:f2000000-f2012800
eth1 Link encap:Ethernet HWaddr 1C:C1:DE:1F:71:CA
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:13400 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1508796 (1.4 MiB) TX bytes:192 (192.0 b)
Interrupt:17 Memory:f0000000-f0012800
eth5 Link encap:Ethernet HWaddr 00:0F:53:07:50:7D
inet addr:90.206.66.13 Bcast:90.206.66.255 Mask:255.255.255.0
inet6 addr: fe80::f:5300:107:507d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8590042795 errors:0 dropped:4 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8308671 (7.9 MiB) TX bytes:1132 (1.1 KiB)
Interrupt:39
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:10 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:700 (700.0 b) TX bytes:700 (700.0 b)
我有以下多播代码要收听:
socket_file_descriptor_ = socket ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
int flag_on = 1;
if ( ( setsockopt ( socket_file_descriptor_, SOL_SOCKET, SO_REUSEADDR, &flag_on,
sizeof(flag_on) ) ) < 0 )
{ exit(1); }
struct ip_mreq mc_req;
inet_pton ( AF_INET, listen_ip_.c_str(), &(mc_req.imr_multiaddr.s_addr) );
mc_req.imr_interface.s_addr = htonl(INADDR_ANY);
if ( ( setsockopt ( socket_file_descriptor_, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(void*) &mc_req, sizeof(mc_req))) < 0)
{ exit(1); }
{
struct sockaddr_in mcast_Addr;
bzero ( &mcast_Addr, sizeof(mcast_Addr) );
mcast_Addr.sin_family = AF_INET;
mcast_Addr.sin_addr.s_addr = htonl(INADDR_ANY);
mcast_Addr.sin_port = htons ( listen_port_ );
/* bind to specified port onany interface */
if ( bind ( socket_file_descriptor_, (struct sockaddr *) &mcast_Addr, sizeof ( struct sockaddr_in ) ) < 0 )
{ exit(1); }
}
// then recvfrom ( socket_file_descriptor_, _dest_, _len_, 0, NULL, NULL );
但这似乎并没有返回在接口"eth5"上接收到的数据。有指针吗?
您使用的是什么平台?我猜是linux操作系统?
您是否完全确定消息到达您的接口(tcpdump、netcat?)。预期的数据来自哪里?你也开发了"发件人"代码吗?是否使用SO_BROADCAST选项?
相关文章:
- 如何使用虚幻引擎"filter"多播?
- 无法在 Windows 10 上加入 IPV6 多播组
- C++:继承自基类和具有公共基接口的多个接口
- 如何在 Linux 上的 C/C++ 中使用 ipv6 udp 套接字进行多播?
- IPv6 多播在局域网中不起作用
- 简单的多播应用程序无法在同一网络上的不同计算机上运行
- Linux VS Windows 上的 UDP 多播差异
- 在覆盆子Pi路由器上进行多播
- C 在特定接口上接收多播
- 如何在C++中实现"Registry pattern",使用单个注册表实现多个接口
- 为什么Zeromq PGM多播未接收多播消息?(C ,Windows)
- Ubuntu C 多播双休假组消息
- 如何从已经订阅的组中接收多播数据包
- 我是否需要2个插座来进行多播和单播
- 使用 Boost ASIO 在 macOS 上到特定接口的多播
- C++的多个接口只在返回类型上不同
- 如何正确接收多播UDP数据包
- 如何为多播指定所有接口
- 多个接口上的多个组播
- 在所有接口上侦听多播