|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 191
|
[JAVA]Simulazione ritardo connessione client
Ho un problemino con la comunicazione tra client e server.
Ho un server che ha una serverSocket che rimane in ascolto con un timeout di 5 secondi. ecco il codice del client : Codice:
private void connetti(String ip, int porta) {
try {
Socket clientSocket = new Socket(ip, porta);
clientSocket.setSoTimeout(5000);
Thread.sleep(7000); //Simulazione di ritardo
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
if(clientSocket.isConnected())
System.out.println("Connessione stabilita con il Server "+format(clientSocket)+"\n");
while (true) {
System.out.print("Client > ");
String userInput = stdIn.readLine();
if(userInput.equalsIgnoreCase("quit")){
System.out.println("Connessione terminata con il Server "+format(clientSocket));
break;
}
else if(clientSocket.isClosed()){
System.out.println("Connessione terminata con il Server "+format(clientSocket));
break;
}
out.println(userInput);
out.flush();
}
stdIn.close();
in.close();
out.close();
clientSocket.close();
} catch (UnknownHostException e) {
System.out.println("Impossibile connettersi al Server "+ip+":"+porta+" Host sconosciuto!");
} catch (IOException e) {
System.out.println("Errore nella connessione con il Server "+ip+":"+porta);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Grazie
__________________
Project HTPC: work in progress! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
In breve, quel costruttore crea e connette in un colpo solo. Usa il costruttore senza argomenti ed il metodo "bind" del socket per connetterlo dopo l'inizializzazione.
Aggiunto: in che senso entra comunque nel while?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1232
|
__________________
Cpu: Amd 64 X2 5200+ - Mobo:M2N32SLI DELUXE - Ram: Corsair xms2 800 mhz kit 4gb - SK Video: Gaiward GTS250 - Ali : Enermax Liberty 500 Wat - Mast DVD: 2 Nec AD-5170A - Case : Thermaltake Armor+ - Dissipatore: Thermaltake V1 Notebook: Sony Vaio VGN-Fe21M-Pda: Htc Diamond |Il mio sito|Flickr| Stanco del solito forum? Vieni a parlare di fotografia su Fotoni |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
La chiusura del socket da parte del server comporta la restituzione di un -1 in lettura lato client.
In altre parole, quando la documentazione parla di eccezione in caso di chiusura si riferisce alla chiusura invocata sull'oggetto socket, non alla chiusura della controparte sul server. Nel tuo codice questo dovrebbe apparire in forma di NullPointerException quando tenti di usare userInput. E' così?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 191
|
ops...giusto
pero ci entra anche cosi Codice:
while(clientSocket.isConnected()){}
__________________
Project HTPC: work in progress! |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Tutti gli stati del socket sono "locali". Ad esempio se fai:
socket.close(); e poi, su quel socket lì (non sulla controparte creata dal server) invochi: socket.isClosed(); allora otterrai un true. E' la lettura a dirti se il Socket sia connesso. int read = socket.getInputStream().read(); if(read == -1) { paff, il flusso in entrata è chiuso! }
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:39.



















