123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- package rsx.udp;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import java.net.SocketException;
- import java.net.SocketTimeoutException;
- import java.net.UnknownHostException;
- import java.util.ArrayList;
- /**
- * Broadcast pour trouver un serveur
- *
- * @author Arthur Brandao
- */
- public class Broadcast {
- protected int port;
- protected String msg;
- protected int timeout = 5000;
- protected int bufferSize = 1024;
- protected ArrayList<InetAddress> servers = new ArrayList<>();
-
- /* --- Constructeurs --- */
- public Broadcast(int port) {
- this.port = port;
- this.msg = "looking for bomberstudent servers";
- }
- public Broadcast(int port, String msg) {
- this.port = port;
- this.msg = msg;
- }
-
- /* --- Methodes --- */
- public boolean search(String answer) {
- //Creation socket
- DatagramSocket socket = null;
- try {
- socket = new DatagramSocket();
- socket.setBroadcast(true);
- socket.setSoTimeout(this.timeout);
- } catch (SocketException ex) {
- System.err.println("Erreur creation de la socket : " + ex.getMessage());
- return false;
- }
- //Envoi message
- byte[] buffer = this.msg.getBytes();
- DatagramPacket packet;
- try {
- packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("255.255.255.255"), this.port);
- socket.send(packet);
- } catch (UnknownHostException ex) {
- System.err.println("Erreur hote inconnu : " + ex.getMessage());
- return false;
- } catch (IOException ex) {
- System.err.println("Erreur IO : " + ex.getMessage());
- return false;
- }
-
- //Attente reponse
- try {
- while (true) {
- //Recepetion reponse
- byte[] tampon = new byte[this.bufferSize];
- DatagramPacket dp = new DatagramPacket(tampon, tampon.length);
- socket.receive(dp);
- String reponse = new String(dp.getData(), 0, dp.getLength());
- //Analyse reponse
- if(reponse.equals(answer)){
- this.servers.add(dp.getAddress());
- }
- }
- } catch (SocketTimeoutException ex) {
- //Rien on fini la methode
- } catch (IOException ex) {
- System.err.println("Erreur IO : " + ex.getMessage());
- return false;
- }
-
- //Fin
- socket.close();
- return true;
- }
-
- public void clean(){
- this.servers = new ArrayList<>();
- }
-
- /* --- Getter/Setter --- */
- public int getPort() {
- return port;
- }
- public void setPort(int port) {
- this.port = port;
- }
- public String getMsg() {
- return msg;
- }
- public void setMsg(String msg) {
- this.msg = msg;
- }
- public int getTimeout() {
- return timeout;
- }
- public void setTimeout(int timeout) {
- this.timeout = timeout;
- }
- public int getBufferSize() {
- return bufferSize;
- }
- public void setBufferSize(int bufferSize) {
- this.bufferSize = bufferSize;
- }
-
- public ArrayList<InetAddress> getServers(){
- return new ArrayList<>(this.servers);
- }
- }
|