2016-08-15 52 views
0

我現在正在C#中的IPTV程序工作。作爲媒體引擎,我使用的是VLC ActiveX插件。數據通過UDP協議。在C#中使用特定的網絡接口與VLC ActiveX插件

現在我遇到了問題。 我有幾個網絡接口。例如,我有局域網連接,用於網絡和Internet訪問,以及VirtualBox網絡。 第一個連接的IP地址爲10.10.10.2,第二個爲192.168.1.2。 當我嘗試加入多播組時,一些IGMP查詢將通過VirtualBox網絡而不是本地連接。所以我沒有收到組播流量。

我需要爲我的應用程序選擇特定的接口(局域網)。所以所有的數據都將通過這個網絡接口。 我在網上找到了一些答案,但並不是專門針對我的問題。

這裏的東西,我試圖用:

IPAddress localAddress = IPAddress.Parse("10.10.10.2"); 
IPEndPoint localEndPoint = new IPEndPoint(localAddress, 0); 
Socket client = new Socket(localEndPoint.AddressFamily, SocketType.Raw, ProtocolType.Igmp); 
client.Bind(localEndPoint); 
axVLCPlugin21.playlist.add("udp://@239.1.9.2:1234", axVLCPlugin21, null); 
axVLCPlugin21.playlist.play(); 

但它不工作。有人能幫助我嗎?

謝謝!

+0

它是如何不工作?你收到和錯誤/異常?沒有結果?意外的結果? –

+0

IGMP查詢仍然繼續通過VirtualBox接口(192.168.1.2)。所以我沒有收到任何數據。沒有任何錯誤。 但我需要爲所有網絡操作選擇我的局域網連接。 –

+0

我記得在看到有些時候有一種方法可以列出C#中的所有網絡接口,然後過濾它們以自動選擇本地網絡。你可能想看看。 –

回答

0

我終於做到了!我製作一個套接字並使用我需要的網絡接口綁定它。之後,我使用此套接字發送IGMP查詢,然後通過所需的網絡接口接收數據。

現在我正在使用此代碼:

 Socket mcastSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
     IPAddress localAddress = IPAddress.Parse("10.10.10.2"); 
     IPEndPoint localEndPoint = new IPEndPoint(localAddress, 0); 
     mcastSocket.Bind(localEndPoint); 

     IPAddress mcastAddress = IPAddress.Parse("239.1.9.2"); 
     MulticastOption mcastOption = new MulticastOption(mcastAddress, localAddress); 
     mcastSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, mcastOption); 

     axVLCPlugin21.playlist.add("udp://@239.1.9.2:1234", axVLCPlugin21, null); 
     axVLCPlugin21.playlist.play();