annotate src/wifibroadcast/WifiBroadcast.java @ 12:e1f43b669cdb

broadcast on DatagramChannel
author one
date Sun, 29 Jul 2012 14:37:12 +0900
parents fc180f38257e
children bb2538b7eb8d
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
3
9c99e2193277 find broadcast
one
parents: 2
diff changeset
3 import java.net.NetworkInterface;
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 import java.io.IOException;
4
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
5 import java.net.DatagramPacket;
3
9c99e2193277 find broadcast
one
parents: 2
diff changeset
6 import java.net.DatagramSocket;
9c99e2193277 find broadcast
one
parents: 2
diff changeset
7 import java.net.InetAddress;
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 import java.net.InetSocketAddress;
3
9c99e2193277 find broadcast
one
parents: 2
diff changeset
9 import java.net.InterfaceAddress;
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 import java.net.SocketException;
4
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
11 import java.net.UnknownHostException;
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 import java.nio.ByteBuffer;
3
9c99e2193277 find broadcast
one
parents: 2
diff changeset
13 import java.util.Enumeration;
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
2
2a328333ba70 no compile errors
one
parents: 1
diff changeset
15 public class WifiBroadcast implements WifiReceiver {
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
3
9c99e2193277 find broadcast
one
parents: 2
diff changeset
17 private DatagramSocket s;
4
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
18 private int port;
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
19 private InetAddress mAddr;
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
9
95d58cc5bb0b instance for test, multiple senders
one
parents: 4
diff changeset
21 public WifiBroadcast(int id,int port, SocketType sender) throws IOException {
4
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
22 this.port = port;
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
23
3
9c99e2193277 find broadcast
one
parents: 2
diff changeset
24 if (sender == SocketType.Sender) {
9c99e2193277 find broadcast
one
parents: 2
diff changeset
25 try {
9c99e2193277 find broadcast
one
parents: 2
diff changeset
26 InetAddress address0 = getBroadcast();
9c99e2193277 find broadcast
one
parents: 2
diff changeset
27 System.out.println("Found broadcast "+address0);
4
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
28 mAddr = address0;
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
29 s = new DatagramSocket();
9
95d58cc5bb0b instance for test, multiple senders
one
parents: 4
diff changeset
30 s.bind(new InetSocketAddress(address0,port+1+id));
4
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
31 s.setBroadcast(true);
3
9c99e2193277 find broadcast
one
parents: 2
diff changeset
32 } catch (SocketException e) {
9c99e2193277 find broadcast
one
parents: 2
diff changeset
33 }
9c99e2193277 find broadcast
one
parents: 2
diff changeset
34 } else {
4
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
35 // InetAddress address0 = getBroadcast();
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
36 s = new DatagramSocket(port);
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
37 // s.bind(new InetSocketAddress(address0,port));
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
38 s.setReuseAddress(true);
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
39 s.setBroadcast(true);
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 }
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 public void recieve(ByteBuffer testData, long timeout) throws IOException {
4
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
44 DatagramPacket packet = new DatagramPacket(testData.array(),testData.capacity());
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
45 s.receive(packet);
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
46 testData.limit(packet.getLength());
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
47 testData.position(0);
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
48 System.out.println("recv "+packet.getLength()+" bytes from "+packet.getAddress());
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
49 return; // one at a time
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
50 }
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
51
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
52
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
53 public void send(ByteBuffer testData) throws IOException {
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
54 DatagramPacket sendPacket = new DatagramPacket(testData.array(), testData.limit(),mAddr, port);
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
55 s.send(sendPacket);
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
56 testData.position(testData.limit());
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
57 System.out.println("send");
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 }
3
9c99e2193277 find broadcast
one
parents: 2
diff changeset
59
4
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
60 public InetAddress getBroadcast0() throws UnknownHostException {
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
61 return InetAddress.getByName("192.168.100.66");
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
62 }
404778ac3f55 worked. Broadcast, Multicast, Multicast channel.
one
parents: 3
diff changeset
63
12
e1f43b669cdb broadcast on DatagramChannel
one
parents: 10
diff changeset
64 public static InetAddress getBroadcast() throws SocketException {
3
9c99e2193277 find broadcast
one
parents: 2
diff changeset
65 Enumeration<NetworkInterface> interfaces =
9c99e2193277 find broadcast
one
parents: 2
diff changeset
66 NetworkInterface.getNetworkInterfaces();
9c99e2193277 find broadcast
one
parents: 2
diff changeset
67 while (interfaces.hasMoreElements()) {
9c99e2193277 find broadcast
one
parents: 2
diff changeset
68 NetworkInterface networkInterface = interfaces.nextElement();
9c99e2193277 find broadcast
one
parents: 2
diff changeset
69 if (networkInterface.isLoopback())
9c99e2193277 find broadcast
one
parents: 2
diff changeset
70 continue; // Don't want to broadcast to the loopback interface
9c99e2193277 find broadcast
one
parents: 2
diff changeset
71 for (InterfaceAddress interfaceAddress :
9c99e2193277 find broadcast
one
parents: 2
diff changeset
72 networkInterface.getInterfaceAddresses()) {
9c99e2193277 find broadcast
one
parents: 2
diff changeset
73 InetAddress broadcast = interfaceAddress.getBroadcast();
9c99e2193277 find broadcast
one
parents: 2
diff changeset
74 if (broadcast == null)
9c99e2193277 find broadcast
one
parents: 2
diff changeset
75 continue;
9c99e2193277 find broadcast
one
parents: 2
diff changeset
76 // Use the address
10
fc180f38257e multiple sender
one
parents: 9
diff changeset
77 System.out.println("MTU="+networkInterface.getMTU());
3
9c99e2193277 find broadcast
one
parents: 2
diff changeset
78 return broadcast;
9c99e2193277 find broadcast
one
parents: 2
diff changeset
79 }
9c99e2193277 find broadcast
one
parents: 2
diff changeset
80 }
9c99e2193277 find broadcast
one
parents: 2
diff changeset
81 throw new SocketException();
9c99e2193277 find broadcast
one
parents: 2
diff changeset
82 }
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83
1
649b8573372c cleanup
one
parents: 0
diff changeset
84
0
df9d16620c08 Wifi broad cast test program
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 }