changeset 19:bb2538b7eb8d

selectMode flag
author one
date Tue, 31 Jul 2012 17:02:46 +0900
parents e9d07562b6b7
children 313dc81af36c
files src/wifibroadcast/WifiBroadcast.java src/wifibroadcast/WifiBroadcastTest.java src/wifibroadcast/WifiDatagram.java src/wifibroadcast/WifiMulticast.java src/wifibroadcast/WifiMulticastChannel.java src/wifibroadcast/WifiReceiver.java src/wifibroadcast/WifiTCP.java
diffstat 7 files changed, 37 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/wifibroadcast/WifiBroadcast.java	Tue Jul 31 16:32:03 2012 +0900
+++ b/src/wifibroadcast/WifiBroadcast.java	Tue Jul 31 17:02:46 2012 +0900
@@ -81,5 +81,9 @@
 		throw new SocketException();
 	}
 
+    @Override
+    public void selectMode(boolean mode) {
+    }
+
 
 }
--- a/src/wifibroadcast/WifiBroadcastTest.java	Tue Jul 31 16:32:03 2012 +0900
+++ b/src/wifibroadcast/WifiBroadcastTest.java	Tue Jul 31 17:02:46 2012 +0900
@@ -23,6 +23,7 @@
 	private boolean bchannel;
     private boolean tcp;
     private String nis = "en1";
+    private boolean selectMode = false;
 
     public WifiBroadcastTest() {
         ports.add(0,DefaultPort);
@@ -90,6 +91,7 @@
             case "-n":  i++; nis = getOptString(args, nis, i); break;
             case "-p":  i++; setPort(args,i); break;
             case "-a":  i++; setAddress(args, i); break;
+            case "-select":  i++; selectMode = true; break;
             default: i++;
             System.out.println(
                     "(default)  Broadcast DatagramSocket\n"+
@@ -105,6 +107,7 @@
                             "-n  en1   Network Interface name for multicast (default en1)\n"+
                             "-p  N      broadcast/multicast port\n"+
                             "-a  S      broadcast/multicast address\n"+
+                            "-select    use select for timeout\n"+
                             "-h          print this\n"+
                             ""
                     );
@@ -173,6 +176,7 @@
     }
 
     public Thread sender(final WifiReceiver wbs, final int count) {
+        wbs.selectMode(selectMode);
 		Runnable sender = new Runnable() {
 
 			@Override
@@ -215,7 +219,7 @@
 	}
 	
 	public Thread receiver(final WifiReceiver wbr, final int id, final int count,  final long timeout) {
-
+	    wbr.selectMode(selectMode);
 		Runnable receiver = new Runnable() {
 			@Override
 			public void run() {
--- a/src/wifibroadcast/WifiDatagram.java	Tue Jul 31 16:32:03 2012 +0900
+++ b/src/wifibroadcast/WifiDatagram.java	Tue Jul 31 17:02:46 2012 +0900
@@ -10,6 +10,9 @@
 import java.nio.ByteBuffer;
 
 public class WifiDatagram implements WifiReceiver {
+    /**
+     *  Test class for non broadcast/multicast datagram
+     */
 
 	private DatagramSocket s;
 	private int port;
@@ -57,4 +60,8 @@
 		return InetAddress.getByName("127.0.0.1");
 	}
 
+    @Override
+    public void selectMode(boolean mode) {
+    }
+
 }
--- a/src/wifibroadcast/WifiMulticast.java	Tue Jul 31 16:32:03 2012 +0900
+++ b/src/wifibroadcast/WifiMulticast.java	Tue Jul 31 17:02:46 2012 +0900
@@ -37,5 +37,10 @@
 		testData.position(testData.limit());
 	}
 
+    @Override
+    public void selectMode(boolean mode) {
+
+    }
+
 }
 
--- a/src/wifibroadcast/WifiMulticastChannel.java	Tue Jul 31 16:32:03 2012 +0900
+++ b/src/wifibroadcast/WifiMulticastChannel.java	Tue Jul 31 17:02:46 2012 +0900
@@ -19,7 +19,7 @@
 	protected SocketAddress sAddr;
 	// select on DatagramChannel does not work now
 	protected Selector selector;
-	protected boolean selectMode = true; 
+	protected boolean selectMode = false; 
 	
 	public WifiMulticastChannel() {}
 
@@ -78,4 +78,9 @@
 //		}
 	}
 
+    @Override
+    public void selectMode(boolean mode) {
+        selectMode = mode;
+    }
+
 }
--- a/src/wifibroadcast/WifiReceiver.java	Tue Jul 31 16:32:03 2012 +0900
+++ b/src/wifibroadcast/WifiReceiver.java	Tue Jul 31 17:02:46 2012 +0900
@@ -10,6 +10,8 @@
 	void recieve(ByteBuffer testData, long timeout) throws IOException;
 
 	void send(ByteBuffer testData) throws IOException;
+	
+	void selectMode(boolean mode);
 
 
 }
--- a/src/wifibroadcast/WifiTCP.java	Tue Jul 31 16:32:03 2012 +0900
+++ b/src/wifibroadcast/WifiTCP.java	Tue Jul 31 17:02:46 2012 +0900
@@ -4,6 +4,7 @@
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
+import java.net.StandardSocketOptions;
 import java.nio.ByteBuffer;
 import java.nio.channels.SelectionKey;
 import java.nio.channels.Selector;
@@ -16,7 +17,7 @@
 	protected SocketAddress sAddr;
 	// select on DatagramChannel does not work now
 	protected static Selector selector;
-	protected boolean selectMode = false;
+	protected boolean selectMode = true;
     private SocketChannel sc; 
     private static ServerSocketChannel ss;
 	
@@ -33,8 +34,8 @@
 		mAddr = InetAddress.getByName(mCASTADDR);
 		sAddr = new InetSocketAddress(mAddr,port);
 		if (sender == SocketType.Receiver) {
+		    ss.setOption(StandardSocketOptions.SO_REUSEADDR, true);
 			ss.bind(new InetSocketAddress(port));
-
 		} else {
             sc = SelectorProvider.provider().openSocketChannel();
             sc.connect(sAddr);
@@ -71,4 +72,9 @@
 //		}
 	}
 
+    @Override
+    public void selectMode(boolean mode) {
+        selectMode = mode;
+    }
+
 }