Presa di monitoraggio con Java

October 31

oggetti socket Java sono usati per rappresentare le connessioni tra due macchine. Tuttavia, un programma che utilizza i socket può diventare impantanato se il programma attende una connessione per stabilire. In questo caso, è possibile dividere fuori un thread separato di esecuzione che attende una connessione, mentre il programma principale corre ancora. Estendendo questo, è possibile utilizzare il thread separato per monitorare le prese per i collegamenti e gestirli, solo notificare il programma quando viene effettuata una connessione o un altro significativo anche accade.

Principale ServerSocket Esempio

Al fine di ascoltare una porta attraverso una presa di corrente, creare un oggetto "SocketServer". I server socket di ascolto per le connessioni su una porta specifica. Al ricevimento delle informazioni di connessione su quella porta, il Socket Server restituisce un oggetto "Socket". Tutti i dati ricevuti tramite la connessione possono essere trattati attraverso quella oggetto socket.

discussioni

Le discussioni sono casi di esecuzione di codice all'interno di un programma. Questi thread di esecuzione consentono l'esecuzione contemporanea di codice, il che significa che il codice può essere scritto per eseguire contemporaneamente attraverso diversi thread. Così, per esempio, un programma che desidera monitorare una sorta di sfondo stato o collegamento può creare un filo che fa questo, e chiamare il filo principale quando qualcosa cambia o si verifica una connessione.

L'ascolto alle porte con i filetti

Con la creazione di un altro thread, è possibile creare il codice che controlla la presa in background mentre il programma principale viene eseguito. Ad esempio, è possibile implementare una classe che estende la classe "Runnable", ed eseguirlo come un thread separato per l'esecuzione in background, l'ascolto di una porta:

classe statica privata SocketListen implementa Runnable {

public void run() {

provare {

listenSocket = new ServerSocket(9999); //listen to port 9999

} Catch (IOException e) {

System.exit(-1); //error

}

Socket clientSocket = null;
provare {

received = serverSocket.accept(); //connection object if success

} Catch (IOException e) {

System.exit(-1); //error

}

}
}

Dividere la discussione

Se è stata definita una classe eseguibile da utilizzare come agente di ascolto / monitoraggio, tutto ciò che rimane è quello di usarlo come un filo. Il programma principale può chiamare un thread separato come parte della sua esecuzione che verrà eseguito il codice socket di ascolto. Una volta che le finiture di codice, sia a causa del successo di connessione o errore, il thread di monitoraggio si ricongiunge il thread principale. Il thread principale viene eseguito un ciclo di attesa fino al termine monitoraggio filo:

t thread = new Thread (nuova SocketListen ());

t.start();

while (t.isAlive ()) {
threadMessage (& quot; Ancora in attesa ... & quot;);
t.join (1000); // Attende un secondo prima di ripetere ciclo
}