View Full Version : [JAVA] socket
Oceans11
07-03-2007, 17:26
Ho fatto questo semplice programma:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketTest
{
private ServerSocket server;
public SocketTest(int port)
{
try
{
server = new ServerSocket(port);
}
catch (IOException ex)
{
ex.printStackTrace();
}
waitingForConnection();
}
public void waitingForConnection()
{
while (true)
{
try
{
Socket sock = server.accept();
System.out.println("Socket connesso");
}
catch (IOException ex)
{
System.err.println("Errore su un'operazione di I/O");
}
}
}
}
Ora mettiamo che ho un client connesso al ServerSocket...
come mi accorgo (da Server) di quando questo (il client) termina la sua esecuzione, o si disconnette???
ps: pensavo che questa situazione si gestisse dal catch ma non và.
Oceans11
08-03-2007, 08:09
up!
nessuno sa aiutarmi?
yorkeiser
08-03-2007, 09:31
Dipende da come implementi il server, comunque di solito nel caso di disconnessione del client, lato server hai un'exception che tratti nel blocco catch.
Un semplice esempio:
link (http://www.lorenzobettini.it/articoli/cliserv/client.htm)
Oceans11
08-03-2007, 09:53
Dipende da come implementi il server, comunque di solito nel caso di disconnessione del client, lato server hai un'exception che tratti nel blocco catch.
Un semplice esempio:
link (http://www.lorenzobettini.it/articoli/cliserv/client.htm)
forse mi sono spiegato male...non voglio gestire io la disconnessione del client.
Faccio un esempio:
ho un server che rimane in ascolto su una porta...un client si connette a quella porta, e dopo un pò di tempo di disconnette ed il server è sempre in ascolto. Non decido io la disconnessione da programma, ma il client (da remoto)...che ne so, "cade la connessione"!
yorkeiser
08-03-2007, 10:11
un client si connette a quella porta, e dopo un pò di tempo di disconnette ed il server è sempre in ascolto
No: nell'esempio che ti ho postato è il client a disconnettersi e il server reagisce (quindi si accorge dell'evento di disconnessione) chiudendo il socket:
finally
{
System.out.println ("Connessione chiusa");
client.close ();
}
Nell'esempio poi il server termina l'esecuzione, ma ovviamente basta gestire il tutto in maniera un po' differente. Mi auguro di aver compreso quello che intendevi
Oceans11
08-03-2007, 13:31
ricevuto!
è che quando ho postato era ancora mattina presto :D
in pratica mi manca il finally, ho capito bene??
(premetto che al momento non ho l'sdk sotto mano)
ma allora mi chiedo...perchè la stampa del catch non viene eseguita?
che io sappia per eseguire il blocco finally deve essere eseguito prima il relativo (o uno tra i relativi) blocco catch...oppure sto ancora dormendo adesso??? :D
Oceans11
08-03-2007, 15:52
ma allora mi chiedo...perchè la stampa del catch non viene eseguita?
che io sappia per eseguire il blocco finally deve essere eseguito prima il relativo (o uno tra i relativi) blocco catch...oppure sto ancora dormendo adesso??? :D
chiedo umilmente scusa per l'enorme cavolata che ho scritto!!!!!!! :sofico:
Dal tutorial della Sun:
"The finally block always executes when the try block exits."
Oceans11
09-03-2007, 13:31
sono io che non riesco a spiegarmi bene :D (e quando mai!!)
ora ti faccio l'esempio più terra terra che mi viene in mente...
Ho il server di cui sopra che se ne sta bello bello in esecuzione...ora provo con il telnet (tanto per farti capire che non devo necessariamente aspettarmi una connessione da un client scritto in java...) a connettermi alla porta su cui il server sta in ascolto.
la connessione è attiva, il telnet non termina l'esecuzione! e se gestissi da server l'inputStream del socket potrei vedere tutto quello che scrivo sul terminale telnet!
ora chiudo il telnet, che ne sò, killo il processo da task manager! come devo fare per accorgemene dal server che il client non sta più in linea??
Non sarà mica che il finally che mi hai postato non funziona perchè non processo l'inputStream????dubbio atroce!!!
spero di aver chiarito un pò la situazione.
Grazie per tutte le risposte.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.