Broadcast.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package rsx.udp;
  2. import java.io.IOException;
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5. import java.net.InetAddress;
  6. import java.net.SocketException;
  7. import java.net.SocketTimeoutException;
  8. import java.net.UnknownHostException;
  9. import java.util.ArrayList;
  10. /**
  11. * Broadcast pour trouver un serveur
  12. *
  13. * @author Arthur Brandao
  14. */
  15. public class Broadcast {
  16. protected int port;
  17. protected String msg;
  18. protected int timeout = 5000;
  19. protected int bufferSize = 1024;
  20. protected ArrayList<InetAddress> servers = new ArrayList<>();
  21. /* --- Constructeurs --- */
  22. public Broadcast(int port) {
  23. this.port = port;
  24. this.msg = "looking for bomberstudent servers";
  25. }
  26. public Broadcast(int port, String msg) {
  27. this.port = port;
  28. this.msg = msg;
  29. }
  30. /* --- Methodes --- */
  31. public boolean search(String answer) {
  32. //Creation socket
  33. DatagramSocket socket = null;
  34. try {
  35. socket = new DatagramSocket();
  36. socket.setBroadcast(true);
  37. socket.setSoTimeout(this.timeout);
  38. } catch (SocketException ex) {
  39. System.err.println("Erreur creation de la socket : " + ex.getMessage());
  40. return false;
  41. }
  42. //Envoi message
  43. byte[] buffer = this.msg.getBytes();
  44. DatagramPacket packet;
  45. try {
  46. packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("255.255.255.255"), this.port);
  47. socket.send(packet);
  48. } catch (UnknownHostException ex) {
  49. System.err.println("Erreur hote inconnu : " + ex.getMessage());
  50. return false;
  51. } catch (IOException ex) {
  52. System.err.println("Erreur IO : " + ex.getMessage());
  53. return false;
  54. }
  55. //Attente reponse
  56. try {
  57. while (true) {
  58. //Recepetion reponse
  59. byte[] tampon = new byte[this.bufferSize];
  60. DatagramPacket dp = new DatagramPacket(tampon, tampon.length);
  61. socket.receive(dp);
  62. String reponse = new String(dp.getData(), 0, dp.getLength());
  63. //Analyse reponse
  64. if(reponse.equals(answer)){
  65. this.servers.add(dp.getAddress());
  66. }
  67. }
  68. } catch (SocketTimeoutException ex) {
  69. //Rien on fini la methode
  70. } catch (IOException ex) {
  71. System.err.println("Erreur IO : " + ex.getMessage());
  72. return false;
  73. }
  74. //Fin
  75. socket.close();
  76. return true;
  77. }
  78. public void clean(){
  79. this.servers = new ArrayList<>();
  80. }
  81. /* --- Getter/Setter --- */
  82. public int getPort() {
  83. return port;
  84. }
  85. public void setPort(int port) {
  86. this.port = port;
  87. }
  88. public String getMsg() {
  89. return msg;
  90. }
  91. public void setMsg(String msg) {
  92. this.msg = msg;
  93. }
  94. public int getTimeout() {
  95. return timeout;
  96. }
  97. public void setTimeout(int timeout) {
  98. this.timeout = timeout;
  99. }
  100. public int getBufferSize() {
  101. return bufferSize;
  102. }
  103. public void setBufferSize(int bufferSize) {
  104. this.bufferSize = bufferSize;
  105. }
  106. public ArrayList<InetAddress> getServers(){
  107. return new ArrayList<>(this.servers);
  108. }
  109. }