Mercurial > hg > Members > kono > WifiBroadcast
view src/wifibroadcast/WifiBroadcastTest.java @ 4:404778ac3f55
worked. Broadcast, Multicast, Multicast channel.
author | one |
---|---|
date | Sat, 28 Jul 2012 19:33:34 +0900 |
parents | 9c99e2193277 |
children | 7679d10bdae9 |
line wrap: on
line source
package wifibroadcast; import java.io.IOException; import java.nio.ByteBuffer; public class WifiBroadcastTest { private static int DefaultPort = 8412; private static String MCASTADDR = "224.0.0.1"; private static int testSize = 256; private static long timeout = 1000; public static void main(String args[]) { int port = DefaultPort ; int count = 16; boolean multicast = false; boolean mchannel = false; WifiReceiver wbr = null; WifiReceiver wbs = null; for(int i=0;i<args.length;i++) { if (args[i].equals("-m")) multicast = true; else if (args[i].equals("-channel")) mchannel = true; else if (args[i].equals("-c")) { i++; count = getOptInt(args, count, i);} else if (args[i].equals("-t")) { i++; timeout = getOptInt(args, count, i);} else if (args[i].equals("-p")) { i++; port = getOptInt(args, count, i);} } try { if (multicast) { wbr = new WifiMulticast(MCASTADDR,port,WifiReceiver.SocketType.Receiver); Thread.sleep(timeout); wbs = new WifiMulticast(MCASTADDR,port,WifiReceiver.SocketType.Receiver); } else if (mchannel) { wbr = new WifiMulticastChannel(MCASTADDR,port,WifiReceiver.SocketType.Receiver); Thread.sleep(timeout); wbs = new WifiMulticastChannel(MCASTADDR,port,WifiReceiver.SocketType.Sender); } else { wbr = new WifiBroadcast(port,WifiReceiver.SocketType.Receiver); Thread.sleep(timeout); wbs = new WifiBroadcast(port,WifiReceiver.SocketType.Sender); } } catch (IOException e) { System.err.println("err "+e); } catch (InterruptedException e) { System.err.println("err "+e); } sender(wbs,count); receiver(wbr,count, timeout); } public static int getOptInt(String[] args, int count, int i) { if (i<args.length) { count = Integer.parseInt(args[i]); } return count; } public static void sender(final WifiReceiver wbs, final int count) { Runnable sender = new Runnable() { @Override public void run() { ByteBuffer testData = getTestData(testSize); int i = 0; try { Thread.sleep(timeout); for(i = 0; i<count;i++) { testData.putInt(0, i); wbs.send(testData); testData.flip(); } } catch (Exception e) { System.err.println("sender error at "+i+" "+e); } } }; Thread s = new Thread(sender); s.start(); try { s.join(); } catch (InterruptedException e) { } } private static boolean running; public static void receiver(final WifiReceiver wbr, final int count, final long timeout) { running = true; Runnable timeouter = new Runnable() { @Override public void run() { try { Thread.sleep(30*1000); } catch (InterruptedException e) { } running = false; } }; Runnable receiver = new Runnable() { @Override public void run() { ByteBuffer testData = ByteBuffer.allocate(4096); int bad = 0, good = 0; try { for(int i = 0; running && i<count;i++) { testData.clear(); wbr.recieve(testData,timeout); if (!testData.hasRemaining()) continue; System.out.println("receive "+testData.remaining()+" bytes."); int seq = testData.getInt(); if (seq!=i) { bad++; i = seq; } else { good++; } } } catch (Exception e) { System.err.println("receiver error "+e); } System.out.println("get "+good+" packets, "+bad+" losts."); } }; Thread r = new Thread(receiver); r.start(); Thread t = new Thread(timeouter); t.start(); try { r.join(); t.join(); } catch (InterruptedException e) { } } public static ByteBuffer getTestData(int i) { ByteBuffer b = ByteBuffer.allocate(i); b.putInt(0); for(int j = 0; j<256; j++ ) { b.put((byte)j); if (! b.hasRemaining()) break; if (j == 255) j=0; } b.flip(); return b; } }