在Raspberry Pi路由器上进行多播

时间:2017-04-17 22:20:25

标签: java c++ linux networking raspberry-pi

我正在尝试设置一个程序,通过本地网络传输我的网络摄像头,但我遇到了一些问题。我在C ++中创建了一个程序,它使用OpenCV从我的网络摄像头捕获图像,然后我获取字节并使用多播将其转换为IP。然后我有一个Java程序来监听这个IP地址。

在我的路由器创建的常用网络上一切正常,我能够将我的网络摄像头流式传输到多台计算机。问题是,我已经将Raspberry Pi设置为路由器(使用此link),每当我在网络上时,覆盆子Pi正在创建我无法组播。

在C ++程序中,我使用" sendto"从sys / socket.h发送数据,它返回-1,错误为Network is unreachable。当我尝试使用java程序来监听IP时,我收到以下错误。

  

线程中的异常" main" java.net.SocketException:没有这样的设备   java.net.PlainDatagramSocketImpl.join(Native Method)at   java.net.AbstractPlainDatagramSocketImpl.join(AbstractPlainDatagramSocketImpl.java:178)   在java.net.MulticastSocket.joinGroup(MulticastSocket.java:323)at   MulticastImageReciever。(MulticastImageReciever.java:29)at   MulticastImageReciever.main(MulticastImageReciever.java:118)

如果需要,我可以发布我写的程序,但由于它在其他网络上工作,我不认为这是问题所在。对于如何解决这个问题,有任何的建议吗?

我能找到的唯一帮助是link,它说使用多播时的一个常见问题是TTL设置为1,但这是由发件人设置的,对吗?如果是这样,这不应该是问题,因为我在两个网络上使用相同的计算机。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果有人在提交的帮助下遇到类似的问题,我找到了解决方案。

首先,由于我使用Raspberry Pi作为路由器,因此必须从any interface to my wireless interface路由多播数据包。在我的案例中,我跑了route add –net 224.0.0.0 netmask 240.0.0.0 gw wlan0。这允许路由器使用IGMP。

其次,2.6 replying to broadcast/multicast is disabled by default之后的Linux内核。要更改此echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts