2017-04-17 75 views
-1

我想設置一個程序,通過本地網絡傳輸我的攝像頭,但我遇到了一些問題。我用C++編寫了一個程序,它使用OpenCV從我的攝像頭捕捉圖像,然後獲取字節並使用多播將它轉換爲IP。然後我有一個Java程序監聽這個IP地址。樹莓派路由器上的多點傳送

在我的路由器創建的通常網絡上,一切正常,我可以將我的攝像頭流式傳輸到多臺計算機上。問題是,我將Raspberry Pi設置爲路由器(使用此link),並且每當我在網絡上創建樹莓派時,我都無法組播。

在C++程序中,我使用sys/socket.h中的「sendto」來發送數據,它返回-1,錯誤號爲Network is unreachable。當我嘗試使用Java程序來偵聽IP時,出現以下錯誤。

異常在線程 「主」 java.net.SocketException異常:在 java.net.PlainDatagramSocketImpl.join(本機方法)在 java.net.AbstractPlainDatagramSocketImpl.join(AbstractPlainDatagramSocketImpl.java:178)沒有這樣的設備 在java.net.MulticastSocket.joinGroup(MulticastSocket.java:323)在 MulticastImageReciever。(MulticastImageReciever.java:29)在 MulticastImageReciever.main(MulticastImageReciever.java:118)

我可以張貼程序我寫了如果需要,但因爲它在另一個網絡上工作奧克我不認爲這是問題。對於如何解決這個問題,有任何的建議嗎?

我一直能找到的唯一幫助是link,它說使用多播的一個常見問題是TTL被設置爲1,但是這是由發送者設置的,是正確的嗎?如果是這樣,這應該不是問題,因爲我在兩個網絡上使用同一臺計算機。

感謝您的幫助!

+0

組播限於廣播域,除非你使用組播路由,這是非常不同於單播路由。您需要特殊的軟件來響應IGMP,並且如果需要路由器到路由器的多播路由,則需要使用PIM。 –

+0

我確實想要使用多播:需要發送給多個接收者,不關心包是否丟失(在某種程度上),並且我並不總是知道哪些計算機將發送/接收數據(正如所說的如果他們符合,我願意接受其他選擇)。 我不認爲我需要路由器到路由器的通信。我只需要能夠在同一網絡上多播到其他計算機。問題是當我使用路由器(即arris路由器)多播與我的程序一起使用時。當我使用Linux計算機作爲路由器(上面的鏈接)時,它不起作用。如果它在同一個網絡上,我需要其他軟件嗎? –

+0

你需要你的路由器使用IGMP。現代交換機不會將組播信息氾濫到每個接口,他們會監聽主機和組播路由器之間的IGMP對話,以確定哪些接口應該接收組播。在不使用IGMP的路由器另一端的接收器永遠不能讓路由器源端的交換機向路由器發送多播。 –

回答

0

如果有人在提交的幫助下遇到類似的問題,我找到了解決方案。

首先,由於我使用Raspberry Pi作爲路由器,因此必須路由來自any interface to my wireless interface的多播數據包。在我的例子中,我跑了route add –net 224.0.0.0 netmask 240.0.0.0 gw wlan0。這允許路由器使用IGMP。二,Linux內核2.6之後replying to broadcast/multicast is disabled by default。改變這個echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts