# HG changeset patch # User one # Date 1343624662 -32400 # Node ID 7b43c3c6070819d9bf276cbc0b7b1c87fe8fbbb1 # Parent 9bf4bf393e4e4f5561a9a1fbb9a82123ec84870d tcp diff -r 9bf4bf393e4e -r 7b43c3c60708 src/wifibroadcast/WifiBroadcastChannel.java --- a/src/wifibroadcast/WifiBroadcastChannel.java Sun Jul 29 15:55:03 2012 +0900 +++ b/src/wifibroadcast/WifiBroadcastChannel.java Mon Jul 30 14:04:22 2012 +0900 @@ -4,7 +4,6 @@ import java.net.InetSocketAddress; import java.net.StandardProtocolFamily; import java.net.StandardSocketOptions; -import java.nio.channels.DatagramChannel; import java.nio.channels.SelectionKey; import java.nio.channels.spi.SelectorProvider; @@ -14,10 +13,9 @@ // join multicast group on this interface, and also use this // interface for outgoing multicast datagrams selectMode = false; - selector = SelectorProvider.provider().openSelector(); - - dc = DatagramChannel.open(StandardProtocolFamily.INET) - .setOption(StandardSocketOptions.SO_REUSEADDR, true); + selector = SelectorProvider.provider().openSelector(); + dc = SelectorProvider.provider().openDatagramChannel(StandardProtocolFamily.INET); + dc.setOption(StandardSocketOptions.SO_REUSEADDR, true); mAddr = WifiBroadcast.getBroadcast(); sAddr = new InetSocketAddress(mAddr,port); dc.setOption(StandardSocketOptions.SO_BROADCAST, true); diff -r 9bf4bf393e4e -r 7b43c3c60708 src/wifibroadcast/WifiBroadcastTest.java --- a/src/wifibroadcast/WifiBroadcastTest.java Sun Jul 29 15:55:03 2012 +0900 +++ b/src/wifibroadcast/WifiBroadcastTest.java Mon Jul 30 14:04:22 2012 +0900 @@ -82,6 +82,7 @@ "-h print this\n"+ "" ); + return; } } } diff -r 9bf4bf393e4e -r 7b43c3c60708 src/wifibroadcast/WifiMulticastChannel.java --- a/src/wifibroadcast/WifiMulticastChannel.java Sun Jul 29 15:55:03 2012 +0900 +++ b/src/wifibroadcast/WifiMulticastChannel.java Mon Jul 30 14:04:22 2012 +0900 @@ -26,7 +26,7 @@ public WifiMulticastChannel(int id, String mCASTADDR, int port, SocketType sender) throws IOException { // join multicast group on this interface, and also use this // interface for outgoing multicast datagrams - selector = SelectorProvider.provider().openSelector(); + selector = SelectorProvider.provider().openSelector(); NetworkInterface ni = NetworkInterface.getByName("en1"); if (ni==null) { System.err.println("Can't open network interface "+"en1"); @@ -38,9 +38,9 @@ throw new IOException(); } - dc = DatagramChannel.open(StandardProtocolFamily.INET) - .setOption(StandardSocketOptions.SO_REUSEADDR, true) - .setOption(StandardSocketOptions.IP_MULTICAST_IF, ni); + dc = SelectorProvider.provider().openDatagramChannel(StandardProtocolFamily.INET); + dc.setOption(StandardSocketOptions.SO_REUSEADDR, true); + dc.setOption(StandardSocketOptions.IP_MULTICAST_IF, ni); mAddr = InetAddress.getByName(mCASTADDR); sAddr = new InetSocketAddress(mAddr,port); dc.join(mAddr, ni); diff -r 9bf4bf393e4e -r 7b43c3c60708 src/wifibroadcast/WifiTCP.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/wifibroadcast/WifiTCP.java Mon Jul 30 14:04:22 2012 +0900 @@ -0,0 +1,75 @@ +package wifibroadcast; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.NetworkInterface; +import java.net.SocketAddress; +import java.net.StandardProtocolFamily; +import java.net.StandardSocketOptions; +import java.nio.ByteBuffer; +import java.nio.channels.DatagramChannel; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.nio.channels.spi.SelectorProvider; + +public class WifiTCP implements WifiReceiver { + protected InetAddress mAddr; + protected SocketAddress sAddr; + // select on DatagramChannel does not work now + protected static Selector selector; + protected boolean selectMode = false; + private SocketChannel sc; + private static ServerSocketChannel ss; + + static { + try { + ss = SelectorProvider.provider().openServerSocketChannel(); + selector = SelectorProvider.provider().openSelector(); + } catch (IOException e) { + } + } + public WifiTCP() {} + + public WifiTCP(int id, String mCASTADDR, int port, SocketType sender) throws IOException { + mAddr = InetAddress.getByName(mCASTADDR); + sAddr = new InetSocketAddress(mAddr,port); + if (sender == SocketType.Receiver) { + ss.bind(new InetSocketAddress(port)); + sc = ss.accept(); + if (selectMode) { + sc.configureBlocking(false); + sc.register(selector, SelectionKey.OP_READ); + } + } else { + sc = SelectorProvider.provider().openSocketChannel(); + sc.connect(sAddr); + } + } + + @Override + public void recieve(ByteBuffer testData, long timeout) throws IOException { + if (selectMode && selector.select(timeout)==0) { + System.out.println("bad select "+timeout); + testData.limit(0); testData.position(0); + return; + } + sc.read(testData); + testData.flip(); + System.out.println("Read "+testData.remaining()+" bytes."); + } + + @Override + public void send(ByteBuffer testData) throws IOException { + while(testData.hasRemaining()) { + sc.write(testData); + } +// try { +// Thread.sleep(100); +// } catch (InterruptedException e) { +// } + } + +}