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 }