java - 监听多播UDP地址

标签 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 .

解决方法是,根据上面的链接,

As a workaround to connect to a UDP multicast, you can do the following:

  1. Use a Java multicast socket to access it directly from MATLAB. For more information, see javadoc or tutorials for the "core java.net" classes from Sun, specifically "java.net.MulticastSocket". This could be found at:

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

我没有 Java 背景,所以这对我来说是一场斗争。我只能运行以下命令来实例化 MulticastSocket对象:

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

我环顾四周,发现我还需要一个java.net.Datagram对象实际包含传入流。

如何使用MulticastSocketDatagram MATLAB 上下文中的对象?我正在尝试复制 u.DatagramAvailableFcn 的功能,即一旦收到数据报,就触发回调以对数据报的内容进行操作。

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

最佳答案

我通过以下方式成功订阅并接收了来自多播流的数据包:

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 中提升的。可在 MathWorks 文件交换中使用。

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

关于java - 监听多播UDP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21734856/

相关文章:

java - E/RecyclerView : No adapter attached; skipping layout D/OpenGLRenderer: eglDestroySurface = 0x730c9a02d0

matlab - 在 matlab 绘图标题中写入 á 或 í

linux - golang udp 连接在每次写入时都被拒绝

java - 运行 exe 时 Eclipse 不启动?

java - 当没有无限递归方法时,是什么导致了这个堆栈溢出错误?

java - 无法使 GWT devmode 插件与 Firefox 一起使用

excel - 要求用户使用 MATLAB 从 EXCEL 中选择所需的数据范围

matlab - 如何在matlab中制作圆圈并在其中生成随机点

c - NIC 收到的数据包未通过套接字读取

c# - Windows 下 C++ 和 C# 中的套接字无法正常工作