Mercurial > hg > Members > kono > WifiBroadcast
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);