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