java-在Android中使用DatagramChannel进行多播数据

java-在Android中使用DatagramChannel进行多播数据,第1张

概述我在使用MulticastSocket的Android开发的开发板上(版本4.3)上有一个工作正常的多播接收器;我想要的是能够使用NIO通道.在Android中不存在MulticastChannel的情况下,我尝试使用DatagramChannel代替它,但到目前为止没有任何运气.如果有人知道有关将通道配置为仅进行多播接收的信息,那

我在使用MulticastSocket的Android开发的开发板上(版本4.3)上有一个工作正常的多播接收器;我想要的是能够使用NIO通道.在AndroID中不存在MulticastChannel的情况下,我尝试使用DatagramChannel代替它,但到目前为止没有任何运气.如果有人知道有关将通道配置为仅进行多播接收的信息,那就太好了!

以下是一些无效的示例代码,但会给出有关我如何进行设置的一般思路:

InetAddress groupAddr = InetAddress.getByname(groupAddress);SelectorProvIDer provIDer = SelectorProvIDer.provIDer();Selector selector = provIDer.openSelector();    DatagramChannel dc = DatagramChannel.open();// this cast failsMulticastSocket socket = (MulticastSocket) dc.socket();// set ttlsocket.setTimetolive(16);// set receive buffersocket.setReceiveBufferSize(65536);socket.setReuseAddress(true);// join groupsocket.joinGroup(groupAddr);

产生这个(我有点期望):

11-14 18:11:56.203: E/AndroIDRuntime(22315): FATAL EXCEPTION: DatagramListener11-14 18:11:56.203: E/AndroIDRuntime(22315): java.lang.classCastException: java.nio.DatagramChannelimpl$DatagramSocketAdapter cannot be cast to java.net.MulticastSocket

解决方法:

工作代码. _pairChannelAndSocket()方法

public class Sample{    private DatagramChannel createChannel(NetworkInterface networkIf, InetSocketAddress address)            throws IOException {        MulticastSocket socket = new MulticastSocket(address.getPort());        socket.setReuseAddress(true);        socket.setbroadcast(true);        socket.joinGroup(MCAST_ADDRESS, networkIf);        DatagramChannel channel = DatagramChannel.open();        _pairChannelAndSocket(channel, socket);        channel.configureBlocking(false);        return channel;    }    public static voID _pairChannelAndSocket(DatagramChannel channel, MulticastSocket socket) {        try {            FIEld f = channel.getClass().getDeclaredFIEld("socket");            f.setAccessible(true);            f.set(channel, socket);        } catch (Exception e) {            Log.e(LOG_TAG, e.getMessage(), e);        }    }}
总结

以上是内存溢出为你收集整理的java-在Android中使用DatagramChannel进行多播数据全部内容,希望文章能够帮你解决java-在Android中使用DatagramChannel进行多播数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1075767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存