Salve ragazzi, sono nuovo del forum, ho un problema sui socket in java, dunque cerco di spiegarmi, il codice che vedete qui sotto è un codice di "prova" che poi andrò ad inserire nel server vero e proprio, dunque dato che questo server comunica con una applicazione android, quindi avevo necessità di riuscire a chiudere il socket quando ad esempio lo smartphone android perde o volontariamete disattivo ad esempio la connesione wi fi, l'applicazione al prossimo tentativo di scrivere sul socket java da un IOException, e quindi catturata l'eccezione chiudo il socket, ma il server non si "accorge" diciamo che il client non è più raggiungibile e quindi il socket rimane aperto, e quindi mi sono creato questo straccio di codice per capire bene dove sia l'errore.
Quindi secondo quanto accade sul applicazione, sul server dovrebbe succedere lo stesso, ovvero quando tento di scrivere con l'oggetto out la parola "check", l'eccezione non viene generata. Non so se mi sono spiegato, spero riusciate ad aiutarmi.codice:import java.io.*;import java.net.*; import java.util.*; public class TCPServer extends Thread { private int port; private ServerSocket server; public TCPServer(int port)throws IOException{ this.port=port; this.server = new ServerSocket(port); } @Override public void run(){ try{ while(!Thread.interrupted()){ Socket conn = server.accept(); System.out.println("Connesso: "+ conn.getInetAddress().toString()); Connection c = new Connection(conn); c.start(); } }catch(IOException ex){ } } public class Connection extends Thread{ private Socket conn; private BufferedReader in; private BufferedWriter out; public Connection(Socket conn)throws IOException{ this.conn = conn; this.in = new BufferedReader(new InputStreamReader(conn.getInputStream())); this.out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream())); } @Override public void run(){ try{ System.out.println("Attesa..."); Thread.sleep(10000); this.out.write("check"); this.out.newLine(); this.out.flush(); System.out.println("Inviato"); }catch(IOException ex){ System.out.println(ex.toString()); }catch(InterruptedException ex){ } } } public static void main(String[] args){ try{ //TCPServer s = new TCPServer(Integer.parseInt(args[0])); TCPServer s = new TCPServer(9000); s.start(); int c = System.in.read(); s.interrupt(); s.join(); }catch(IOException ex){ }catch(InterruptedException ex){ } } }
Grazie mille![]()