Mercurial > hg > Members > kono > WifiBroadcast
comparison src/main/java/jp/ac/uryukyu/ie/kono/wifibroadcast/WifiBroadcast.java @ 27:12633f67f3cf default tip
jar
author | oshiro |
---|---|
date | Wed, 28 Nov 2018 18:28:39 +0900 |
parents | src/main/jp/ac/uryukyu/ie/kono/wifibroadcast/WifiBroadcast.java@42ecbd9364fa |
children |
comparison
equal
deleted
inserted
replaced
26:42ecbd9364fa | 27:12633f67f3cf |
---|---|
1 package jp.ac.uryukyu.ie.kono.wifibroadcast; | |
2 | |
3 import java.net.NetworkInterface; | |
4 import java.io.IOException; | |
5 import java.net.DatagramPacket; | |
6 import java.net.DatagramSocket; | |
7 import java.net.InetAddress; | |
8 import java.net.InterfaceAddress; | |
9 import java.net.SocketException; | |
10 import java.net.UnknownHostException; | |
11 import java.nio.ByteBuffer; | |
12 import java.util.Enumeration; | |
13 | |
14 public class WifiBroadcast implements WifiReceiver { | |
15 | |
16 private DatagramSocket s; | |
17 private int port; | |
18 private InetAddress mAddr; | |
19 | |
20 public WifiBroadcast(int id,int port, SocketType sender) throws IOException { | |
21 this.port = port; | |
22 | |
23 if (sender == SocketType.Sender) { | |
24 try { | |
25 InetAddress address0 = getBroadcast(); | |
26 System.out.println("Found broadcast "+address0); | |
27 mAddr = address0; | |
28 s = new DatagramSocket(); | |
29 // s.bind(new InetSocketAddress(address0,port+1+id)); | |
30 // s.setBroadcast(true); | |
31 } catch (SocketException e) { | |
32 } | |
33 } else { | |
34 // InetAddress address0 = getBroadcast(); | |
35 s = new DatagramSocket(port); | |
36 // s.bind(new InetSocketAddress(address0,port)); | |
37 s.setReuseAddress(true); | |
38 s.setBroadcast(true); | |
39 } | |
40 } | |
41 | |
42 public void recieve(ByteBuffer testData, long timeout) throws IOException { | |
43 DatagramPacket packet = new DatagramPacket(testData.array(),testData.capacity()); | |
44 s.receive(packet); | |
45 testData.limit(packet.getLength()); | |
46 testData.position(0); | |
47 System.out.println("recv "+packet.getLength()+" bytes from "+packet.getAddress()); | |
48 return; // one at a time | |
49 } | |
50 | |
51 | |
52 public void send(ByteBuffer testData) throws IOException { | |
53 if(testData.limit() < 1500) { | |
54 DatagramPacket sendPacket = new DatagramPacket(testData.array(), testData.limit(),mAddr, port); | |
55 s.send(sendPacket); | |
56 testData.position(testData.limit()); | |
57 } else { | |
58 int temp = 1000; | |
59 for(int i = 0 ; i < testData.limit();) { | |
60 DatagramPacket sendPacket = new DatagramPacket(testData.array(),i, temp, mAddr, port); | |
61 s.send(sendPacket); | |
62 testData.position(i); | |
63 i += 1000; | |
64 if(testData.limit() - i > 1000) { | |
65 temp = 1000; | |
66 } else { | |
67 temp = testData.limit() - i; | |
68 } | |
69 } | |
70 } | |
71 System.out.println("send"); | |
72 } | |
73 | |
74 public InetAddress getBroadcast0() throws UnknownHostException { | |
75 return InetAddress.getByName("192.168.100.66"); | |
76 } | |
77 | |
78 public static InetAddress getBroadcast() throws SocketException { | |
79 Enumeration<NetworkInterface> interfaces = | |
80 NetworkInterface.getNetworkInterfaces(); | |
81 while (interfaces.hasMoreElements()) { | |
82 NetworkInterface networkInterface = interfaces.nextElement(); | |
83 if (networkInterface.isLoopback()) | |
84 continue; // Don't want to broadcast to the loopback interface | |
85 for (InterfaceAddress interfaceAddress : | |
86 networkInterface.getInterfaceAddresses()) { | |
87 InetAddress broadcast = interfaceAddress.getBroadcast(); | |
88 if (broadcast == null) | |
89 continue; | |
90 // Use the address | |
91 System.out.println("MTU="+networkInterface.getMTU()); | |
92 return broadcast; | |
93 } | |
94 } | |
95 throw new SocketException(); | |
96 } | |
97 | |
98 @Override | |
99 public void selectMode(boolean mode) { | |
100 } | |
101 | |
102 | |
103 } |