Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    35

    chat con stanze private

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


    }

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Immissione di codice come fossero bruscolini non è ammessa da nessun forum "intelligente"..

    Lo scrivere centinaia di righe, non identate, non invoglia certo le risposte e la lettura stessa..

    Ti consiglio vivamente di condividere i file sorgenti piuttosto invitando la gente a scaricarseli e guardarseli con calma senza perdere la vista.. segnalo..

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Esattamente.
    Se si tratta di poche righe di codice le si posta, utilizzando gli appositi tag [*CODE] e [*/CODE] (senza l'asterisco rosso) in modo da mantenere l'indentazione e renderlo più leggibile.

    Se si tratta di tanto codice, è bene renderlo disponibile da qualche parte per il download o richiedere l'invio separato su segnalazione PVT.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    35
    va bene mi scuso per la mia ignoranza..... :master:

    d'ora in avanti non lo farò piu

    Client.java
    http://phpfi.com/264984
    Clienti.java
    http://phpfi.com/264985
    Server.java
    http://phpfi.com/264986
    ThreadClient1.java
    http://phpfi.com/264987
    ThreadServer1.java
    http://phpfi.com/264988
    VectorHandler.java
    http://phpfi.com/264989

    spero che adesso che l'ho sistemato mi possiate aiutare....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.