changeset 15:cce76e5eb29b

with tcp
author one
date Tue, 31 Jul 2012 16:18:26 +0900
parents 7b43c3c60708
children b5ab7003f6d1
files src/wifibroadcast/WifiBroadcastTest.java src/wifibroadcast/WifiMulticastChannel.java
diffstat 2 files changed, 91 insertions(+), 48 deletions(-) [+]
line wrap: on
line diff
--- a/src/wifibroadcast/WifiBroadcastTest.java	Mon Jul 30 14:04:22 2012 +0900
+++ b/src/wifibroadcast/WifiBroadcastTest.java	Tue Jul 31 16:18:26 2012 +0900
@@ -2,6 +2,7 @@
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.util.LinkedList;
 
 public class WifiBroadcastTest {
 	private static int DefaultPort = 8412;
@@ -10,7 +11,8 @@
 	private static long timeout = 1000;
 
 
-	int port = DefaultPort ; 
+    LinkedList<Integer> ports  = new LinkedList<Integer>();
+    LinkedList<String> addresses = new LinkedList<String>();
 	int count = 16;
 	boolean multicast = false;
 	boolean mchannel = false;
@@ -19,7 +21,13 @@
 	WifiReceiver wbr[] = new WifiReceiver[receiver_count];
 	WifiReceiver wbs[] = new WifiReceiver[sender_count];
 	private boolean bchannel;
+    private boolean tcp;
 
+    public WifiBroadcastTest() {
+        ports.add(0,DefaultPort);
+        addresses.add(0,MCASTADDR);
+    }
+    
 	public static void main(String args[]) {
 		new WifiBroadcastTest().test(args);
 	}
@@ -28,21 +36,26 @@
 		options(args);
 		try {
 			if (multicast) {
-				for(int i=0;i<wbr.length;i++) wbr[i] = new WifiMulticast(i,MCASTADDR,port,WifiReceiver.SocketType.Receiver);
+				for(int i=0;i<wbr.length;i++) wbr[i] = new WifiMulticast(i,getAddress(i),getPort(i),WifiReceiver.SocketType.Receiver);
 				Thread.sleep(timeout/4);
-				for(int i=0;i<wbs.length;i++) wbs[i] = new WifiMulticast(i,MCASTADDR,port,WifiReceiver.SocketType.Sender);
+				for(int i=0;i<wbs.length;i++) wbs[i] = new WifiMulticast(i,getAddress(i),getPort(i),WifiReceiver.SocketType.Sender);
 			} else if (mchannel) {
-				for(int i=0;i<wbr.length;i++) wbr[i] = new WifiMulticastChannel(i,MCASTADDR,port,WifiReceiver.SocketType.Receiver);
-				Thread.sleep(timeout/4);
-				for(int i=0;i<wbs.length;i++) wbs[i] = new WifiMulticastChannel(i,MCASTADDR,port,WifiReceiver.SocketType.Sender);			
+			    for(int i=0;i<wbr.length;i++) wbr[i] = new WifiMulticastChannel(i,getAddress(i),getPort(i),WifiReceiver.SocketType.Receiver);
+			    Thread.sleep(timeout/4);
+			    for(int i=0;i<wbs.length;i++) wbs[i] = new WifiMulticastChannel(i,getAddress(i),getPort(i),WifiReceiver.SocketType.Sender);                 
+			} else if (tcp) {
+			    MCASTADDR = "127.1";
+			    for(int i=0;i<wbr.length;i++) wbr[i] = new WifiTCP(i,getAddress(i),getPort(i),WifiReceiver.SocketType.Receiver);
+			    Thread.sleep(timeout/4);
+			    for(int i=0;i<wbs.length;i++) wbs[i] = new WifiTCP(i,getAddress(i),getPort(i),WifiReceiver.SocketType.Sender);     	
 			} else if (bchannel) {
-				for(int i=0;i<wbr.length;i++) wbr[i] = new WifiBroadcastChannel(i,port,WifiReceiver.SocketType.Receiver);
-				Thread.sleep(timeout/4);
-				for(int i=0;i<wbs.length;i++) wbs[i] = new WifiBroadcastChannel(i,port,WifiReceiver.SocketType.Sender);
+			    for(int i=0;i<wbr.length;i++) wbr[i] = new WifiBroadcastChannel(i,getPort(i),WifiReceiver.SocketType.Receiver);
+			    Thread.sleep(timeout/4);
+				for(int i=0;i<wbs.length;i++) wbs[i] = new WifiBroadcastChannel(i,getPort(i),WifiReceiver.SocketType.Sender);
 			} else {
-				for(int i=0;i<wbr.length;i++) wbr[i] = new WifiBroadcast(i,port,WifiReceiver.SocketType.Receiver);
+				for(int i=0;i<wbr.length;i++) wbr[i] = new WifiBroadcast(i,getPort(i),WifiReceiver.SocketType.Receiver);
 				Thread.sleep(timeout/4);
-				for(int i=0;i<wbs.length;i++) wbs[i] = new WifiBroadcast(i,port,WifiReceiver.SocketType.Sender);
+				for(int i=0;i<wbs.length;i++) wbs[i] = new WifiBroadcast(i,getPort(i),WifiReceiver.SocketType.Sender);
 			}
 		} catch (IOException e) {
 			System.err.println("err "+e);
@@ -53,43 +66,54 @@
 
 	}
 
-	public void options(String[] args) {
-		for(int i=0;i<args.length;i++) {
-			switch(args[i]) {
-			case "-m": multicast = true; break;
-			case "-channel": mchannel = true; break;
-			case "-bchannel": bchannel = true; break;
-			case "-r":  i++; receiver_count = getOptInt(args, receiver_count, i); wbr = new WifiReceiver[receiver_count];  break;
-			case "-s":  i++; sender_count = getOptInt(args, sender_count, i); wbs = new WifiReceiver[sender_count];  break;
-			case "-c":  i++; count = getOptInt(args, count, i); break;
-			case "-t":  i++; timeout = getOptInt(args, (int) timeout, i); break;
-			case "-T":  i++; testSize = getOptInt(args, testSize, i); break;
-			case "-p":  i++; port = getOptInt(args, port, i); break;
-			case "-a":  i++; MCASTADDR = getOptString(args, MCASTADDR, i); break;
-      default: i++;
-         System.out.println(
-           "(default)  Broadcast DatagramSocket\n"+
-           "-m         Multicast DatagramSocket\n"+
-           "-cahnnel   Multicast with DatagramChannel\n"+
-           "-bcahnnel  Broadcase with DatagramChannel\n"+
-           "-r  N      create N receivers\n"+
-           "-s  N      create N senders\n"+
-           "-c  N      send count packet\n"+
-           "-t  N      timeout N msec\n"+
-           "-T  N      send N byte packet\n"+
-           "-p  N      broadcast/multicast port\n"+
-           "-a  S      broadcast/multicast address\n"+
-           "-h          print this\n"+
-           ""
-         );
-         return;
-      }
-		}
-	}
+	private String getAddress(int i) {
+        return addresses.get(i%addresses.size());
+    }
+
+    private int getPort(int i) {
+        return ports.get(i%ports.size());
+    }
+
+    public void options(String[] args) {
+        for(int i=0;i<args.length;i++) {
+            switch(args[i]) {
+            case "-m": multicast = true; break;
+            case "-channel": mchannel = true; break;
+            case "-bchannel": bchannel = true; break;
+            case "-tcp": tcp = true; break;
+            case "-r":  i++; receiver_count = getOptInt(args, receiver_count, i); wbr = new WifiReceiver[receiver_count];  break;
+            case "-s":  i++; sender_count = getOptInt(args, sender_count, i); wbs = new WifiReceiver[sender_count];  break;
+            case "-c":  i++; count = getOptInt(args, count, i); break;
+            case "-t":  i++; timeout = getOptInt(args, (int) timeout, i); break;
+            case "-T":  i++; testSize = getOptInt(args, testSize, i); break;
+            case "-p":  i++; setPort(args,i); break;
+            case "-a":  i++; setAddress(args, i); break;
+            default: i++;
+            System.out.println(
+                    "(default)  Broadcast DatagramSocket\n"+
+                            "-m         Multicast DatagramSocket\n"+
+                            "-cahnnel   Multicast with DatagramChannel\n"+
+                            "-bcahnnel  Broadcase with DatagramChannel\n"+
+                            "-tcp       TCP stream\n"+
+                            "-r  N      create N receivers\n"+
+                            "-s  N      create N senders\n"+
+                            "-c  N      send count packet\n"+
+                            "-t  N      timeout N msec\n"+
+                            "-T  N      send N byte packet\n"+
+                            "-p  N      broadcast/multicast port\n"+
+                            "-a  S      broadcast/multicast address\n"+
+                            "-h          print this\n"+
+                            ""
+                    );
+            return;
+            }
+        }
+    }
 
 
 
-	public void runTest(int count, WifiReceiver[] wbr, WifiReceiver wbs[]) {
+
+    public void runTest(int count, WifiReceiver[] wbr, WifiReceiver wbs[]) {
 		Thread t = timeouter();
 		Thread send[]  = new Thread[wbs.length];
 		int id = 0;
@@ -127,7 +151,25 @@
 		return str;
 	}
 
-	public Thread sender(final WifiReceiver wbs, final int count) {
+    private void setAddress(String[] args, int i) {
+        String adr = getOptString(args,addresses.get(0),i);
+        int p;
+        if ((p=adr.indexOf(":"))>0) {
+            String sp = adr.substring(p+1);
+            adr = adr.substring(0,p-1);
+            if (ports.size()>i) ports.remove(i);
+            ports.add(i,Integer.parseInt(sp));
+        }
+        if (addresses.size()>i) addresses.remove(i);
+        addresses.add(i,adr);
+    }
+
+	private void setPort(String[] args, int i) {
+	       if (ports.size()>i) ports.remove(i);
+	        ports.add(i,Integer.parseInt(args[i]));
+    }
+
+    public Thread sender(final WifiReceiver wbs, final int count) {
 		Runnable sender = new Runnable() {
 
 			@Override
--- a/src/wifibroadcast/WifiMulticastChannel.java	Mon Jul 30 14:04:22 2012 +0900
+++ b/src/wifibroadcast/WifiMulticastChannel.java	Tue Jul 31 16:18:26 2012 +0900
@@ -19,7 +19,7 @@
 	protected SocketAddress sAddr;
 	// select on DatagramChannel does not work now
 	protected Selector selector;
-	protected boolean selectMode = false; 
+	protected boolean selectMode = true; 
 	
 	public WifiMulticastChannel() {}
 
@@ -38,7 +38,8 @@
 			throw new IOException();
 		}
 
-		dc = SelectorProvider.provider().openDatagramChannel(StandardProtocolFamily.INET);
+		// dc = SelectorProvider.provider().openDatagramChannel(StandardProtocolFamily.INET);
+		dc = DatagramChannel.open(StandardProtocolFamily.INET);
 		dc.setOption(StandardSocketOptions.SO_REUSEADDR, true);
 		dc.setOption(StandardSocketOptions.IP_MULTICAST_IF, ni);
 		mAddr = InetAddress.getByName(mCASTADDR);