(java) Aiuto con chat in java

Mr. Smith

Nuovo Utente
9 Ott 2006
1
1
0
Ciao a tutti sono nuovo del forum e spero di trovare qualcuno che mi aiuti a fare una cosa semplice, ma che mi sta facendo impazzire (soprattutto perchè non sono tanto pratico con java)...in particolare dovrei sviluppare una semplice chat in java (multithread), niente di particolarmente elaborato e performante, è per un esame, e sono arrivato al punto in cui non devo fare più l'eco dei messaggi ma mandare il mess di un client a tutti quelli collegati al momento..posto il codice fatto finora:
Codice:
------------SERVER-----------

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


public class ChatServer {

    private static final int serverPort = 7890;
    public static Vector n_utenti = new Vector();
    public int n;
    public Connessione s;

    public ChatServer() {
    }

    public static void main(String args[]) {
        try {
            ServerSocket server = new ServerSocket(serverPort);
            System.out.println("Server Attivo");
            while (true) {
                Socket clientSocket = server.accept();
               Connessione c = new Connessione(clientSocket /*, u*/);
               n_utenti.add(c);
               System.out.println(n_utenti.size());
            }
        } catch (IOException e) {
            System.out.println("Listen:" + e.getMessage());
        }
    }
}

class Connessione extends Thread {

    BufferedReader in;
    PrintWriter out;
    Socket clientSocket;
    int n;

    DataOutputStream o;

    boolean connesso = true;

    public Connessione(Socket aClientSocket /*, Utente u*/) {

         n = ChatServer.n_utenti.size();

        try {

            this.clientSocket = aClientSocket;

            System.out.println("connessione ricevuta da: " +
                               clientSocket.getInetAddress());
            in = new BufferedReader(new InputStreamReader(clientSocket.
                    getInputStream()));
            out = new PrintWriter(clientSocket.getOutputStream(), true);
            this.start();

        } catch (IOException e) {
            System.out.println("Connessione:" + e.getMessage());
        }
    }

    public void run() {

        Socket address;

        try { // an echo server
            // echo client input
            out.println("Hello! Enter BYE to Exit");

            boolean done = false;
            while (!done) {
                String line = in.readLine();
                if (line == null) {
                    done = true; //Loop infinito in cui scrivo qualcosa e me lo rispedisco, finch� nn scrivo "Bye"
                }

                else if (line.trim().equals("BYE")) {
                    done = true;

                }

                else {
                    for (int i = 0; i < ChatServer.n_utenti.size();i++ ) {
                        try {
QUI DOVREI INSERIRE IL METODO CHE MANDA MESS IN BROADCAST
                             
                            out.println(line);
                            
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }

                    System.out.println(ChatServer.n_utenti.size());
                    out.println(line);

                }

            }

            System.out.println("il Client " + clientSocket.getInetAddress() +
                               " si � disconnesso");

        } catch (EOFException e) {
            System.out.println("EOF:" + e.getMessage());
        } catch (IOException e) {
            System.out.println("IO:" + e.getMessage());
        } finally {
            try {
                clientSocket.close();
            } catch (IOException e) {}
        }
    }
}



-------------CLIENT-------------

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


public class ChatClient {


    /** Creates a new instance of EchoClient */
    public ChatClient() {
    }

    public static void main(String args[]) {
        // arguments supply message and hostname of destination

        Socket s = null;

        try {
            String SERVER = "localHost";
            int serverPort = 7890;

            s = new Socket(); //si crea una socket NN bloccante
            s.connect(new InetSocketAddress(SERVER, serverPort), 1000); //Dopo 1000 ms esce, altrimenti nresterebbe bloccato

            BufferedReader s_in = new BufferedReader (new InputStreamReader(s.getInputStream())); //verso server
            PrintWriter s_out = new PrintWriter(s.getOutputStream(),true);

            BufferedReader console = new BufferedReader(new InputStreamReader(System.in));

            String data = s_in.readLine();
            System.out.println(data);

            while (true) {
                String input = console.readLine();

                s_out.println("Echo: " +input);
                data = s_in.readLine();

                System.out.println(data);

                if (input.trim().equals("BYE")) {
                    System.exit(0);

            } }

        } catch (UnknownHostException e) {
            System.out.println("Sock:" + e.getMessage());
        } catch (EOFException e) {
            System.out.println("EOF:" + e.getMessage());
        } catch (IOException e) {
            System.out.println("IO:" + e.getMessage());
        }

        finally {
            if (s != null) {
                try {
                    s.close();
                } catch (IOException e) { 
                    System.out.println("close:" + e.getMessage());
                }
            }
        }
    }
}
Accetto suggerimenti..poi dovrei inserire altre funzionalità, ma casomai posterò più avanti, per il momento mi interessa questo, sperando che qualcuno mi aiuti....

Grazie in anticipo ciao ciao :beer:
 
  • Like
Reactions: ottofonsuppost

Discussioni simili