Simple Chat

SERVER

ChatServer

package server;
 
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.util.LinkedList;
 
public class ChatServer {
 
    private LinkedList<ClientConnection> listaConnessioni = new LinkedList<ClientConnection>();
 
    public synchronized SocketAddress getSocketAddressOfUser(int index) {
        ClientConnection user = listaConnessioni.get(index);
        return user.getSocketAddress();
    }
 
    public synchronized void addConnessioni(ClientConnection u) {
        listaConnessioni.add(u);
    }
 
    public synchronized int getNumberOfConnection() {
        return listaConnessioni.size();
 
    }
 
    public synchronized void sendBroadcastMSG(ClientConnection sender,String msg) {
 
        for(ClientConnection user: listaConnessioni) {
 
            if(user != sender) {
                user.sendMSG(msg);
            }
        }
    }
 
    public static void main(String[] args) {
 
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(2893);
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        ChatServer chatServer = new ChatServer();
 
        while(true) {
            Socket clientSocket = null;
            try {
                clientSocket = serverSocket.accept();
            } catch (IOException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
 
            ClientConnection utente = new ClientConnection(clientSocket , chatServer);
            chatServer.addConnessioni(utente);
            utente.start();
 
        }
    }
 
}

ClientConnection

package server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketAddress;
 
public class ClientConnection extends Thread {
 
    private Socket clientSocket;
    private ChatServer chatServer;
    private PrintWriter out;
    private BufferedReader in;
    private InetAddress ip;
    private int portNumber;
    private SocketAddress socketAddress;
 
    public ClientConnection(Socket clientSocket, ChatServer chatServer) {
        // TODO Auto-generated constructor stub
        super();
        this.clientSocket = clientSocket;
        this.chatServer = chatServer;
        ip = clientSocket.getInetAddress();
        portNumber = clientSocket.getPort();
        socketAddress = clientSocket.getRemoteSocketAddress();
    }
 
    public int getPortNumber() {
        return portNumber;
    }
 
    public InetAddress getIP() {
        return ip;
    }
 
    public SocketAddress getSocketAddress() {
        return socketAddress;
    }
 
    public void sendMSG(String msg) {
        out.print(msg + "\r\n");
        out.flush();
    }
 
    public void run() {
        try {
            out = new PrintWriter(clientSocket.getOutputStream(), true);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
        // Stampa sullo standard output del Server l'indirizzo IP del nuovo utente connesso
        System.out.println("Indirizzo IP Client Connesso " + ip);
 
        // Invio al Client il messaggio di connessione al Server
        sendMSG("CONNECTED");
 
        int numberOfConnection = chatServer.getNumberOfConnection();
        String connectedIP = "";
        SocketAddress a = null;
 
        for (int i = 0; i < numberOfConnection; i++) {
            a = chatServer.getSocketAddressOfUser(i);
            if(a != socketAddress) {
                connectedIP += a + "\n";
            }
        }
        //invio al Client la lista degli utenti Connessi
        sendMSG(connectedIP);
 
        chatServer.sendBroadcastMSG(this,"ADDED " + socketAddress);
 
        while (true) {
            String fromClient = "";
            try {
                fromClient = in.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
 
            if (fromClient.startsWith("SEND")) {
                String msg = fromClient.substring(5, fromClient.length());
                chatServer.sendBroadcastMSG(this,socketAddress+"@"+msg);
            }
 
        }
 
    }
}

CLIENT

ChatClient

package client;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
 
public class ChatClient {
 
    public static void main(String[] args) throws IOException {
 
        Socket chatSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;
 
        try {
            chatSocket = new Socket("localhost", 2893);
            out = new PrintWriter(chatSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(chatSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.exit(1);
        } catch (IOException e) {
            System.exit(1);
        }
 
        BufferedReader userInputReader = new BufferedReader(new InputStreamReader(System.in));
        String fromServer;
 
        while ((fromServer = in.readLine()) != null) {
 
            if (fromServer.equals("CONNECTED")) {
 
                System.out.println("Sono connesso con");
 
                while(!((fromServer = in.readLine()).equals(""))) {
                    System.out.println(fromServer);
                }
 
                // Faccio partire il Thread per Gestire l'input dell'utente
                ChatInputManager chatInputManager = new ChatInputManager(userInputReader,out);
                chatInputManager.start();
 
                // Itero all'infinito stampando quello che il Server mi invia
                while(true) {
 
                    fromServer = in.readLine();
 
                    if (fromServer.startsWith("ADDED")) {
                        String[] serverMSG = fromServer.split(" ");
                        System.out.println("Si e' aggiunto "  + serverMSG[1]);
                    } else {
                        String[]msg = fromServer.split("@",2);
                        System.out.println(msg[0] + " ha scritto:");
                        System.out.println(msg[1]);
                    }
                }
            } 
        }
 
    }
}

ChatInputManager

package client;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
 
public class ChatInputManager extends Thread{
 
    private BufferedReader userInputReader;
    private PrintWriter socketOutWriter;
 
    public ChatInputManager(BufferedReader userInputReader, PrintWriter socketOutWriter) {
        // TODO Auto-generated constructor stub
        this.userInputReader = userInputReader;
        this.socketOutWriter = socketOutWriter;
    }
 
    public void run() {
        while(true) {
            String fromUser = "";
            try {
                fromUser = userInputReader.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            socketOutWriter.print(fromUser + "\r\n");
            socketOutWriter.flush();
        }
    }
}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License