我在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多播的解决方法,您可以执行以下操作:
- 使用Java多播套接字直接从MATLAB访问它。有关更多信息,请参阅"核心java.net"的javadoc或教程。来自Sun的课程,特别是" 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的上下文中使用MulticastSocket
和Datagram
个对象?我尝试复制u.DatagramAvailableFcn
的功能,即在收到数据报的内容后触发回调来操作数据报的内容。
编辑:就Java而言看起来像this is how I want to go about this,但现在它又重新回到了MATLAB-land ...
答案 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
不同。