1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
| import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class Discovery implements Runnable {
private InetAddress pMyAddress;
private int pPortTX = 30303; // port d'emission
private int pPortRX = 30303; // port de reception
//private byte[] pBufferRX;
private DatagramSocket pSocket;
private boolean pThreadOn = false;
// constructeur
public Discovery(){
super();
// ouverture du port de reception
try {
pMyAddress = InetAddress.getLocalHost();
//System.out.println("sendDiscoveryMsg : test1");
pSocket = new DatagramSocket(pPortRX);
//System.out.println("sendDiscoveryMsg : test2");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// envoie le message
public void sendDiscoveryMsg(){
byte[] buffer = "Discovery: who is out there?".getBytes();
InetAddress myAddress;
//DatagramSocket socket;
DatagramPacket packet;
//System.out.println("sendDiscoveryMsg : call");
try {
//socket = new DatagramSocket(pPortRX);
//System.out.println("sendDiscoveryMsg : call1");
myAddress = InetAddress.getByName("255.255.255.255");
//System.out.println("sendDiscoveryMsg : call2");
packet = new DatagramPacket(buffer, buffer.length, myAddress, pPortTX);
packet.setData(buffer);
//socketTX.send(packet);
pSocket.send(packet);
System.out.println("sendDiscoveryMsg : message envoyé");
//socketTX.close(); // fermeture
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// recupère un message
// attention processus blocant
public void getDiscoveryMsg(){
DatagramPacket packet;
//DatagramSocket socket;
byte[] buffer = new byte[1500];
try {
//socket = new DatagramSocket(pPortRX);
packet = new DatagramPacket(buffer, buffer.length);
pSocket.receive(packet);
if (!packet.getSocketAddress().equals(pMyAddress)){
System.out.println("getDiscoveryMsg : message reçu => " + new String(packet.getData(), 0, packet.getLength()));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// lance le thread
public void run() {
//*
DatagramPacket packet;
//DatagramSocket socket = null;
byte[] buffer = new byte[1500];
pThreadOn = true; // pour arreter le thread
while(pThreadOn){
try {
//socket = new DatagramSocket(pPortRX);
packet = new DatagramPacket(buffer, buffer.length);
pSocket.receive(packet);
if (!packet.getSocketAddress().equals(pMyAddress)){
System.out.println("getDiscoveryMsg : message reçu => " + new String(packet.getData(), 0, packet.getLength()));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//pSocket.close();
//if (pSocket.isClosed()){
// pSocket = null;
//}
// */
}
// ferme le thread
public void close(){
pThreadOn = false;
System.out.println("Discovery : close");
if (!pSocket.isConnected()){
pSocket.disconnect();
}
if (!pSocket.isClosed()){
pSocket.close();
}
pSocket = null;
}
} |