我在使用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进行多播数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)