ClientGetLocalServerList.java
Go to the documentation of this file.
1 package p2pclient;
2 
3 import java.net.DatagramPacket;
4 import java.net.DatagramSocket;
5 import java.net.InetAddress;
6 import java.util.Hashtable;
7 
15 
19  public ClientGetLocalServerList(){super();} //costruttore
20 
32  public static Hashtable start(String bip, int port, int timeout, boolean dbg){
33 
34  Hashtable input = new Hashtable();
35  byte[] buf = new byte[256];
36 
37  DatagramSocket socket;
38  try
39  {
40  buf = InetAddress.getLocalHost().getHostAddress().getBytes(); // This IP
41  socket = new DatagramSocket();
42  InetAddress address= InetAddress.getByName(bip); // (Broadcast) address
43 
44  DatagramPacket packet = new DatagramPacket(buf, buf.length,address, port);
45  socket.send(packet);
46 
47  do
48  {
49  buf = new byte[256];
50  packet = new DatagramPacket(buf, buf.length);
51  socket.setSoTimeout(timeout); // Quando scatta provoca un eccezione (termina il while)
52  socket.receive(packet);
53 
54  String s = new String(packet.getData());
55  s = s.substring(0, s.indexOf(0));
56 
57  if(isServerIp(s)){
58  if(!input.containsValue(s))
59  input.put(input.size(),s);
60  }
61  else
62  if(dbg) p2putility.Util.logClient("Ricevuto IP non valido: "+s);
63  }
64  while(true);
65 
66  }
67  catch (Exception ex){ /* Rileva anche il timeout, che non e' un errore */ }
68 
69  if(dbg) p2putility.Util.logClient("Lista definitiva dei server: "+input.toString()); // HashTable definitiva
70 
71  return input;
72  }
73 
80  private static boolean isServerIp(String ins)
81  {
82  try
83  {
84  if(ins==null) return false;
85  if(ins.length()<7) return false;
86 
87  int nofp = 0, i;
88  for(i=0;i<ins.length();i++)
89  if(ins.charAt(i)=='.')
90  nofp++;
91 
92  if(nofp!=3) return false;
93 
94  String tmps = ins.substring(0, ins.indexOf('.'));
95  i = Integer.parseInt(tmps);
96  if((i<0)||(i>255)) return false;
97 
98  ins = ins.substring(tmps.length()+1);
99 
100  tmps = ins.substring(0, ins.indexOf('.'));
101  i = Integer.parseInt(tmps);
102  if((i<0)||(i>255)) return false;
103 
104  ins = ins.substring(tmps.length()+1);
105 
106  tmps = ins.substring(0, ins.indexOf('.'));
107  i = Integer.parseInt(tmps);
108  if((i<0)||(i>255)) return false;
109 
110  ins = ins.substring(tmps.length()+1);
111 
112  i = Integer.parseInt(ins);
113  if((i<0)||(i>255)) return false;
114 
115  /*REGEXP?!
116  final Pattern IP_PATTERN =
117  Pattern.compile("b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).)"
118  + "{3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)b");
119  return IP_PATTERN.matcher(ins).matches();*/
120  return true;
121  }
122  catch(Exception e){ return false; }
123  }
124 }
Classe che implementa metodi vari di utilita&#39; generale.
Definition: Util.java:14
static boolean isServerIp(String ins)
Funzione che verifica se la stringa passata come parametro e&#39; un indirizzo ip.
static Hashtable start(String bip, int port, int timeout, boolean dbg)
Funzione che invia un Datagram in broadcast e che fino allo scadere del timeout resta in attesa delle...
ClientGetLocalServerList()
Costruttore della classe.
Classe che implementa un client mediante socket, che effettua in broadcast la richiesta dei server at...
static void logClient(String data)
Scrive i dati in input sul file di log del Client (se questo esiste valido)
Definition: Util.java:121