Ciao ,
diciamo che come logica funziona , solo che il client quando manda un messaggio al server , si blocca a "br.readLine()" finche un secondo client nn scrive qualcosa ... ho letto delle conversazioni e forse dovrei usare DataInputStream solo che nn capisco come mai questo problema , sapete aiutarmi?
codice:import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Collection; import java.util.Vector; /** * questa classe gestisce le conversazioni * @author Japper * */ public class Connessione implements Runnable { private Socket connessione = null; private InputStream is = null; private InputStreamReader isr = null; private BufferedReader br = null; private String mex = null; private PrintWriter pw = null; private Vector<Socket> listaConnessioni = null; public Connessione(Socket ss, Vector<Socket> lista) { this.connessione = ss; this.listaConnessioni = lista; } public void run() { try { while (true) { //inizio lettura dal client is = connessione.getInputStream(); isr = new InputStreamReader(is); br = new BufferedReader(isr); mex = br.readLine(); //invio il messaggio di un client ai altri client for(Socket s:listaConnessioni){ if(s!=connessione){ System.out.println("uno"); pw = new PrintWriter(s.getOutputStream(), true); pw.println(mex); pw.flush(); } } System.out.println("<" + connessione + "> \"" + mex + "\""); } } catch (IOException ioe) { System.err.println("ERRORE (IOException) : " + ioe.getMessage()); } } //inutile xD public void addConnessione(Socket socket){ listaConnessioni.add(socket); } public static void main(String[] args) { ServerSocket ss = null; Socket socket = null; Vector<Socket> listaConnessioni = new Vector<Socket>(); try { ss = new ServerSocket(8080); System.out.println("..........."); while (true) { socket = ss.accept(); listaConnessioni.add(socket); Connessione serverThread = new Connessione(socket , listaConnessioni); Thread thread = new Thread(serverThread); thread.start(); } } catch (IOException ioe) { System.err.println("ERROR : " + ioe.getMessage()); } catch (SecurityException se) { System.err.println("ERROR : " + se.getMessage()); } catch (IllegalArgumentException iae) { System.err.println("ERROR : " + iae.getMessage()); } finally { // Close di Socket try { if (null != socket) { socket.close(); } } catch (IOException ioe) { System.err.println("ERROR (IOException) : " + ioe.getMessage()); } catch (SecurityException se) { System.err.println("ERROR (SecurityException): " + se.getMessage()); } catch (IllegalArgumentException iae) { System.err.println("ERROR (IllegalArgumentException): " + iae.getMessage()); } // close del ServerSocket try { if (null != ss) { ss.close(); } } catch (IOException ioe) { System.err.println("ERROR (IOException): " + ioe.getMessage()); } catch (SecurityException se) { System.err.println("ERROR (SecurityException) : " + se.getMessage()); } catch (IllegalArgumentException iae) { System.err.println("ERROR (IllegalArgumentException): " + iae.getMessage()); } } } }codice:import java.net.*; import java.io.*; import javax.swing.*; /** * questa classe si connette al server sulla porta 8080 all'indirizzo 127.0.0.1 * @author Japper * */ public class Client { public static void main(String[] args)throws Exception{ InetAddress indirizzo = InetAddress.getByName("127.0.0.1" ) ; int porta = Integer.parseInt("8080" ); Socket s = new Socket( indirizzo , porta ); System.out.println("Inizio Conversazione"); InputStream is = null; InputStreamReader isr = null; BufferedReader br = null; BufferedReader myInput = null; PrintWriter pout = null; InputStreamReader reader = null; System.out.println("------------------------"); try{ is = s.getInputStream(); while(true){ //legge dal dos e manda il messaggio al server if(System.in!=null){ reader = new InputStreamReader(System.in); myInput = new BufferedReader (reader); String str = new String (myInput.readLine()); pout = new PrintWriter(s.getOutputStream(), true); pout.println(str); } //legge dal server e stampa a video il messaggio e il socket del destinatario if(is!= null){ isr = new InputStreamReader( is ); br = new BufferedReader( isr ); String mex = br.readLine(); System.out.println("<" + s + "> \"" + mex + "\"" ); } } }catch(Exception e){ System.out.println("problemi CLIENT"); }finally{ isr.close(); is.close(); pout.close(); myInput.close(); reader.close(); s.close(); } } }

Rispondi quotando