我正在尝试设置一个程序,通过本地网络传输我的网络摄像头,但我遇到了一些问题。我在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,但这是由发件人设置的,对吗?如果是这样,这不应该是问题,因为我在两个网络上使用相同的计算机。
感谢您的帮助!
答案 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