ciao a tutti...ho fatto una chat semplice dove i clienti accedono al server e una volta inserita la propria username iniziano a chattare tra di loro...ora vorrei che qualcuno mi aiutasse per potere creare stanze dove chattano solo un gruppo di utenti in modo privato.

ecco il codice fatto fin'ora...

CLIENTI.JAVA

import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;

public class Clienti{

String nome;
PrintStream ps;
//String hobby;
//Image mypicture;
//Date birth;



public Clienti (PrintStream ps, String nome){

this.ps = ps;
this.nome = nome;


}

public String getNome(){

return nome;
}

public PrintStream getStream() {
return ps;
}

}

CLIENT.JAVA

import java.io.*;
import java.net.*;
import java.lang.*;

public class Client {

public static void main (String args[]){

BufferedReader br = null;
String str = null;
String username = null;
InputStream is = null;
Socket cs = null;
PrintStream pw = null;
BufferedReader stdIn = null;
String str1 = null;
String str2 = null;
int i = 0;


try {

cs = new Socket ("localhost",1234);
// crea la socket e la pone in comunicazione con il server

br = new BufferedReader (new InputStreamReader (cs.getInputStream()));

pw = new PrintStream (cs.getOutputStream());
//predisposizione a ricevere ed inviare

stdIn = new BufferedReader ( new InputStreamReader (System.in));
//buffer per stampare quello che digito

str = br.readLine();
//legge il messaggio di benvenuto

System.out.println(str);

System.out.println ("Inserire Username (max 20 caratteri)");

username = stdIn.readLine();//riceve username

i = username.length();//conta quanto e lungo l'username



while (i==0 || i>20) {//Controllo username

System.out.println ("Username non corretto");

System.out.println ("Inserire Username (max 20 caratteri)");

username = stdIn.readLine();

i = username.length();

}



pw.println(username);//dopo il controllo puo inviarlo


new ThreadClient1(br).start();
//il trhread serve per ricevere


// il programma principale server per inviare
while (true){



str2 = stdIn.readLine();//Client scrive poi invia

pw.println(str2);


}

}
catch (Exception e){

System.out.println("Errore Connessione Server");

} // end try catch

} // end metodo

} // end class


SERVER.JAVA

import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;

public class Server {


public static void main(String[] args) {

VectorHandler vector_hand = new VectorHandler();

System.out.println ("Server in attesa...");

ServerSocket ss = null;

try{

ss = new ServerSocket (1234);



while (true){ //Server rimane in attesa

Socket clientsocket = ss.accept();// Attesa socket

new ThreadServer1 (clientsocket, vector_hand).start();

}
}

catch (Exception e){
System.out.println("Errore di apertura porta");

}
}
}


THREADCLIENT1.JAVA

import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;

public class ThreadClient1 extends Thread {


private BufferedReader input;


public ThreadClient1 (BufferedReader input){
this.input = input;
}

public void run(){

try{
while (true){
String str1 = input.readLine();//client riceve

System.out.println(str1);
}
}
catch (IOException e) {
System.out.println("Errore in ascolto");
}
}
}


THREADSERVER1.JAVA

import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;

public class ThreadServer1 extends Thread {

Socket client;
PrintStream p = null;
BufferedReader br = null;
VectorHandler server;
Clienti cliente;

public ThreadServer1 (Socket socket, VectorHandler server){

System.out.println("E' arrivato il/a nuovo/a amico/a da "+socket.getInetAddress());
client = socket;
this.server = server;
}

public void run(){

try{
System.out.println ("Server pronto a ricevere nuovi amici sulla porta 1234");

br = new BufferedReader (new InputStreamReader (client.getInputStream()));//predisposizione a ricevere

p = new PrintStream (client.getOutputStream());//predisposizione ad inviare

p.println("::BENVENUTO NELLA MIA CHAT::");

String myname = br.readLine();//riceve username

System.out.println ("E' entrato il nuovo amico "+ myname);

p.println("::CIAO "+ myname + "! ORA SEI CONNESSO/A ALLA CHAT!!::");//invia il mess di benvenuto

cliente = new Clienti (p,myname);//aggiorna il vettore dei clienti connessi

server.aggiungiclienti(cliente);



int numeclienti = server.contaclienti();//conta quanti clienti sono presenti nel vettore (dentro al ciclo perche altrimenti se fosse fuori ogni thread conterebbe diversamente


for (int y=0;y<numeclienti;y++) {//li spedisce ad ogni elemento del vettore che contiene tutti i client

Clienti current_client = server.nome(y);//selezione ogni singolo elemento del vettore

PrintStream ps = current_client.getStream();

ps.println(myname+" e' entrato in chat");//invia ad ogni elemento i-esimo

}


while (true){//Ricezione ed invio messaggi

String str1 = br.readLine();//Server legge i messaggi che gli arrivano

System.out.println("<"+myname+"> " + str1);

int numclienti = server.contaclienti();//conta quanti clienti sono presenti nel vettore (dentro al ciclo perche altrimenti se fosse fuori ogni thread conterebbe diversamente


for (int i=0;i<numclienti;i++) {//li spedisce ad ogni elemento del vettore che contiene tutti i client

Clienti cliente1 = server.nome(i);//selezione ogni singolo elemento del vettore

PrintStream ps = cliente1.getStream();

ps.println("<"+myname+"> "+str1);//invia ad ogni elemento i-esimo

}

}


} // try
catch (Exception e)
{
System.out.println ("Errore di connessione con il client o il client si è disconnesso");

int numerclienti = server.contaclienti();//conta quanti clienti sono presenti nel vettore (dentro al ciclo perche altrimenti se fosse fuori ogni thread conterebbe diversamente


for (int j=0;j<numerclienti;j++)
{//li spedisce ad ogni elemento del vettore che contiene tutti i client

Clienti cliente3 = server.nome(j);//selezione ogni singolo elemento del vettore

cliente3.ps.println("Un'amico si e' disconnesso");//invia ad ogni elemento i-esimo


}


server.rimuovi(cliente);//Aggiorna il vettore se qualc esce

} // end try catch
}

}


VECTORHANDLER.JAVA

import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;

public class VectorHandler {

Vector vettoreclienti;
// uso un vector
// non sapendo a priori quanti clienti avro, il vettore e' estensibile

public VectorHandler() {
vettoreclienti = new Vector();
}

public void aggiungiclienti(Clienti nuovocliente) {//aggiunge un elemento
vettoreclienti.addElement(nuovocliente);
}

public int contaclienti(){//riporta la lunghezza del vettore
return vettoreclienti.size();

}

public Clienti nome (int i) { //seleziona l'elemento i-esimo del vettore
return (Clienti) vettoreclienti.elementAt(i);
}

public void rimuovi(Clienti client) {//rimuove un elemento
vettoreclienti.remove(client);
}


}