annotate src/wifibroadcast/WifiBroadcastTest.java @ 1:649b8573372c

cleanup
author one
date Sat, 28 Jul 2012 12:24:04 +0900
parents df9d16620c08
children 2a328333ba70
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 package wifibroadcast;
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 import java.io.IOException;
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 import java.nio.ByteBuffer;
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 public class WifiBroadcastTest {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 private static int DefaultPort = 8212;
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 private static String MCASTADDR = "224.0.0.1";
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 static void main(String args[]) {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 int port = DefaultPort ;
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 int count = 1024;
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 long timeout = 1000;
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 boolean multicast = false;
1
649b8573372c cleanup
one
parents: 0
diff changeset
15 boolean mchannel = false;
649b8573372c cleanup
one
parents: 0
diff changeset
16 WifiReceiver wbr = null;
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 for(int i=0;i<args.length;i++) {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 if (args[i].equals("-m")) multicast = true;
1
649b8573372c cleanup
one
parents: 0
diff changeset
19 else if (args[i].equals("-channel")) mchannel = true;
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 else if (args[i].equals("-c")) { i++; count = getOptInt(args, count, i);}
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 else if (args[i].equals("-t")) { i++; timeout = getOptInt(args, count, i);}
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 else if (args[i].equals("-p")) { i++; port = getOptInt(args, count, i);}
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 try {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 if (multicast) {
1
649b8573372c cleanup
one
parents: 0
diff changeset
26 wbr = new WifiMulticast(MCASTADDR,port);
649b8573372c cleanup
one
parents: 0
diff changeset
27 } else if (mchannel) {
649b8573372c cleanup
one
parents: 0
diff changeset
28 wbr = new WifiMulticastChannel(MCASTADDR,port);
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 } else {
1
649b8573372c cleanup
one
parents: 0
diff changeset
30 wbr = new WifiBroadcast(port);
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 } catch (IOException e) {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 }
1
649b8573372c cleanup
one
parents: 0
diff changeset
34 sender(wbr,count);
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 receiver(wbr,count, timeout);
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 public static int getOptInt(String[] args, int count, int i) {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 if (i<args.length) { count = Integer.parseInt(args[i]); }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 return count;
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
1
649b8573372c cleanup
one
parents: 0
diff changeset
47 public static void sender(final WifiReceiver wbs, final int count) {
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 Runnable sender = new Runnable() {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 @Override
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 public void run() {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 ByteBuffer testData = getTestData(4096);
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 try {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 for(int i = 0; i<count;i++) {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 testData.putInt(0, i);
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 wbs.send(testData);
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 } catch (IOException e) {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 };
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 new Thread(sender).start();
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
1
649b8573372c cleanup
one
parents: 0
diff changeset
64 private static boolean running;
649b8573372c cleanup
one
parents: 0
diff changeset
65
649b8573372c cleanup
one
parents: 0
diff changeset
66 public static void receiver(final WifiReceiver wbr, final int count, final long timeout) {
649b8573372c cleanup
one
parents: 0
diff changeset
67 running = true;
649b8573372c cleanup
one
parents: 0
diff changeset
68 Runnable timeouter = new Runnable() {
649b8573372c cleanup
one
parents: 0
diff changeset
69 @Override
649b8573372c cleanup
one
parents: 0
diff changeset
70 public void run() {
649b8573372c cleanup
one
parents: 0
diff changeset
71 try {
649b8573372c cleanup
one
parents: 0
diff changeset
72 Thread.sleep(30*1000);
649b8573372c cleanup
one
parents: 0
diff changeset
73 } catch (InterruptedException e) {
649b8573372c cleanup
one
parents: 0
diff changeset
74 }
649b8573372c cleanup
one
parents: 0
diff changeset
75 running = false;
649b8573372c cleanup
one
parents: 0
diff changeset
76 }
649b8573372c cleanup
one
parents: 0
diff changeset
77 };
649b8573372c cleanup
one
parents: 0
diff changeset
78 Runnable receiver = new Runnable() {
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 @Override
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 public void run() {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 ByteBuffer testData = ByteBuffer.allocate(4096);
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 int num = 0, bad = 0;
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 try {
1
649b8573372c cleanup
one
parents: 0
diff changeset
84 for(int i = 0; running && i<count;i++) {
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 wbr.recieve(testData,timeout);
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 int seq = testData.getInt();
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 if (seq!=i) {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 bad++; i = seq;
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 } catch (IOException e) {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 System.out.println("get "+num+" packets, "+bad+" losts.");
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 };
1
649b8573372c cleanup
one
parents: 0
diff changeset
96 new Thread(receiver).start();
649b8573372c cleanup
one
parents: 0
diff changeset
97 new Thread(timeouter).start();
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 public static ByteBuffer getTestData(int i) {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 ByteBuffer b = ByteBuffer.allocate(i);
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 b.putInt(0);
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 for(int j = 0; j<256; j++ ) {
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 b.put((byte)j);
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 if (! b.hasRemaining()) break;
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 if (j == 255) j=0;
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 b.flip();
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 return b;
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 }