Mercurial > hg > Members > kono > WifiBroadcast
view src/wifibroadcast/WifiBroadcastReciver.java @ 0:df9d16620c08
Wifi broad cast test program
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 28 Jul 2012 12:16:49 +0900 |
parents | |
children |
line wrap: on
line source
package wifibroadcast; import java.io.IOException; import java.net.InetSocketAddress; import java.net.SocketException; import java.net.StandardSocketOptions; import java.nio.ByteBuffer; import java.nio.channels.ClosedChannelException; import java.nio.channels.DatagramChannel; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.spi.SelectorProvider; import java.util.Iterator; import fdl.TupleHandler; public class WifiBroadcastReciver implements WifiReciver { private DatagramChannel channel; private Selector selector; public WifiBroadcastReciver(int port) throws IOException { selector = SelectorProvider.provider().openSelector(); channel = SelectorProvider.provider().openDatagramChannel(); channel.setOption(StandardSocketOptions.SO_REUSEADDR, true); try { InetSocketAddress address = new InetSocketAddress("::", port); channel.socket().bind(address); } catch (SocketException e) { // for some bad IPv6 implementation channel.socket().bind(new InetSocketAddress(port)); } channel.register(selector, SelectionKey.OP_READ); } public void recieve(ByteBuffer testData, long timeout) throws IOException { if (selector.select(timeout)>0) { for (Iterator<SelectionKey> it = selector.selectedKeys().iterator();it.hasNext(); ) { SelectionKey s = it.next(); it.remove(); DatagramChannel ch = (DatagramChannel)s.channel(); ch.read(testData); testData.flip(); return; // one at a time } } } }