侦听多播UDP地址

时间:2014-02-12 17:14:41

标签: java matlab udp multicast

我在MATLAB中编写了一个应用程序来打开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访问它。有关更多信息,请参阅"核心java.net"的javadoc或教程。来自Sun的课程,特别是" java.net.MulticastSocket"。可以在以下网址找到:
  2.               

    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的功能,即在收到数据报的内容后触发回调来操作数据报的内容。

编辑:就Java而言看起来像this is how I want to go about this,但现在它又重新回到了MATLAB-land ...

1 个答案:

答案 0 :(得分: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);

这基本上取决于MathWorks文件交换中的judp

我仍然在寻找一种方法来获得一些DatagramReceivedFcn - 现在看起来socket.receive调用阻塞直到它超时。我可以使用timer个对象定期触发“回调”,但这当然与拥有DatagramReceivedFcn不同。