Eccomi!!
Allora, mi sto incartando nello scrivere un metodo di classe, nella classe Master,
che provveda a interrogare lo stato degli slaves, con un ciclo for da i=0 a i<10.
Quello che vorrei fare è: mettere dentro un ciclo for la creazione di un nuovo socket, ad ogni ciclata del for, e aperto lo stream di input di quel socket, leggere l'output dello slave e sapere il suo stato. Una volta acquisito questo dato, inserirlo insieme all'ip dello slave che ha risposto nella hashtable "listaSlaves" nella classe Master.
Come si può fare in modo che, all'interno del for, possa evitare che si blocchi l'applicazione con qualche eccezione nel caso in cui il socket temporaneo, che voglio creare all'interno del ciclo for, non possa essere creato perchè, ad esempio,
il socket che si vuole creare non si può agganciare all'ip generato in quel momento?
(Per esempio, una causa potrebbe essere che non esiste una macchina slave con un certo ip...quindi la creazione o binding del socket fallisce).
Il punto fondamentale è che, in caso di non esistenza di una macchina slave con un certo ip, il ciclo for continui...invece di generare un'eccezzione che termina tutto il programma in esecuzione.
Posto questa funzione (Scusate, METODO), il cui codice è da prendere con le pinze!! :-S
codice:
public static void refreshListaSlaves() {
listaSlaves = new Hashtable();
try {
//Inizializzo le variabili tempSocket, IP e PORTA;
//IP = 150.100.100.10x (con x = 1...9);
Socket tempSocket = null;
String IP = null; //IP = "150.100.100.";
int PORTA = 5555;
for(int i=0; i<10; i++) {
int lastOctet = 100 + (i + 1);
IP = ("150.100.100." + lastOctet + "");
try {
tempSocket = new Socket(IP, PORTA);
if(tempSocket != null) {
//Apro lo Stream di input per ricevere lo stato dello Slave corrente;
ObjectInputStream in = new ObjectInputStream(tempSocket.getInputStream());
//Leggo lo stato dello Slave corrente;
String status = (String) in.readObject();
//Aggiungo alla Lista degli SLaves lo Slaves corrente (IP, Stato);
listaSlaves.put(IP, status);
}
} catch (ClassNotFoundException e) {
System.out.println("Si è verificato un errore!");
}
}
} catch (IOException e) {
System.out.println("Si è verificato un errore di IOException!");
e.printStackTrace();
}
}