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?
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());
}
}
}
}
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();
}
}
}