2014-02-12 91 views
1

我在MATLAB中編寫了一個應用程序來打開一個UDP套接字並偵聽傳入的數據報。基本上,這樣的事情:收聽多播UDP地址

u = udp(rHost, rPort, 'LocalHost', lHost, 'LocalPort', lPort); 
u.DatagramAvailableFcn = @(o,e) operateOnData(o,e); 
fopen(u); 

當我以單播方式聽東西的時候,這很有用。但我現在想能夠監聽多播流量。顯然,this isn't possible in MATLAB

的解決方法是,按照上面的鏈接,

的解決方法是連接到一個UDP多播,您可以執行以下操作:

  1. 使用Java多播套接字進行訪問直接來自MATLAB。有關更多信息,請參閱Sun的「核心java.net」類的javadoc或教程,特別是「java.net.MulticastSocket」。這可以在這裏找到:

http://java.sun.com/j2se/1.4.2/docs/api/java/net/MulticastSocket.html

我已經在Java中沒有背景,所以這是對我的鬥爭。我只能夠運行下面的實例化一個對象MulticastSocket

>> ms = javaObject('java.net.MulticastSocket'); 

我環顧四周,發現我還需要一個java.net.Datagram對象實際上包含的輸入流。

如何在MATLAB的上下文中使用MulticastSocketDatagram對象?我試圖複製u.DatagramAvailableFcn的功能,即一旦我收到數據報,就會觸發一個回調操作數據報的內容。

編輯:看起來像this is how I want to go about this在Java方面,但現在它越來越這回MATLAB的土地......

回答

0

我成功認購,並從多播流接收的數據包,通過如下:

socket = java.net.MultiSocket(streamPort); 
socket.joinGroup(java.net.InetAddress.getByName(streamIP)); 
socket.setReuseAddress(1); 

packet = java.net.DatagramPacket(zeros(1, intmax('uint16'), 'int8'), intmax('uint16')); 

socket.receive(packet); 

socket.leaveGroup(InetAddress.getByName(streamIP)); 
socket.close; 

msg = packet.getData; 
msg = msg(1:packet.getLength); 

這基本上從judp availble的解除了MathWorks的文件交換。

我仍在尋找一種方法來獲得DatagramReceivedFcn的一些等價物 - 現在它看起來像socket.receive呼叫被阻塞,直到超時。我可以使用timer對象定期觸發「回調」,但這當然與具有DatagramReceivedFcn不同。