我尝试了很多UdpClient,UdpServer,Spring Integration Ip模块的东西,包装DatagramSocket接收方法返回Flux,但我根本无法从标准SSDP 239.255.255.250:1900收到任何响应 .
奖励积分也用于向SSDP发送数据包 .
对于那些感兴趣的人,这是一个片段 . 我能够通过Flux Launcher 而不是reactor-netty UDP类来实现 .
private static final String SSDP_IP = "239.255.255.250"; private static final int SSDP_PORT = 1900; private static final int TIMEOUT = 5000; String request = new String("example"); byte[] receiveData = new byte[1024]; DatagramPacket sendPacket = new DatagramPacket(request.getBytes(), request.getBytes().length, InetAddress.getByName(SSDP_IP), SSDP_PORT); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length, InetAddress.getLocalHost(), SSDP_PORT); Flux<String> response = Flux.create(emitter -> { try (DatagramSocket socket = new DatagramSocket()) { socket.setSoTimeout(TIMEOUT); socket.send(sendPacket); while (true) { socket.receive(receivePacket); emitter.next(receivePacket.getData()); } } catch (SocketTimeoutException e) { emitter.complete(); } catch (IOException e) { emitter.error(e); } }) .map(mapper -> new String(receivePacket.getData(), 0, receivePacket.getLength()))
1 回答
对于那些感兴趣的人,这是一个片段 . 我能够通过Flux Launcher 而不是reactor-netty UDP类来实现 .