Skip to content

padmachandrika/Project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

//ChatServer.java

Package Project; import java.io.; import java.net.; import java.util.concurrent.*;

public class ChatServer { private static final int PORT = 12345; private static CopyOnWriteArrayList clients = new CopyOnWriteArrayList<>(); private static ConcurrentHashMap<String, ClientHandler> clientMap = new ConcurrentHashMap<>();

public static void main(String[] args) {
    try (ServerSocket serverSocket = new ServerSocket(PORT)) {
        System.out.println("Chat server started on port " + PORT);

        while (true) {
            Socket clientSocket = serverSocket.accept();
            ClientHandler clientHandler = new ClientHandler(clientSocket);
            clients.add(clientHandler);
            new Thread(clientHandler).start();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static void broadcastMessage(String message) {
    for (ClientHandler client : clients) {
        client.sendMessage(message);
    }
}

public static void sendPrivateMessage(String clientId, String message) {
    ClientHandler client = clientMap.get(clientId);
    if (client != null) {
        client.sendMessage(message);
    }
}

public static void removeClient(ClientHandler clientHandler) {
    clients.remove(clientHandler);
    clientMap.remove(clientHandler.getClientId());
}

static class ClientHandler implements Runnable {
    private Socket socket;
    private PrintWriter out;
    private BufferedReader in;
    private String clientId;

    public ClientHandler(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            out = new PrintWriter(socket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            clientId = in.readLine();
            clientMap.put(clientId, this);
            System.out.println("Client connected: " + clientId);

            String message;
            while ((message = in.readLine()) != null) {
                if (message.startsWith("@")) {
                    int spaceIndex = message.indexOf(' ');
                    if (spaceIndex != -1) {
                        String targetClientId = message.substring(1, spaceIndex);
                        String privateMessage = message.substring(spaceIndex + 1);
                        sendPrivateMessage(targetClientId, privateMessage);
                        System.out.println("Private message from " + clientId + " to " + targetClientId + ": " + privateMessage);
                    }
                } else {
                    broadcastMessage(clientId + ": " + message);
                    System.out.println("Broadcast message from " + clientId + ": " + message);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            removeClient(this);
            System.out.println("Client disconnected: " + clientId);
        }
    }

    public void sendMessage(String message) {
        out.println(message);
    }

    public String getClientId() {
        return clientId;
    }
}

}

//ChatClient.java

package project; import java.io.; import java.net.; import java.util.Scanner;

public class ChatClient { private static final String SERVER_ADDRESS = "localhost"; private static final int SERVER_PORT = 12345;

public static void main(String[] args) {
    try (Socket socket = new Socket(SERVER_ADDRESS, SERVER_PORT);
         PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
         BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {

        Scanner scanner = new Scanner(System.in);

        // Send client ID to the server
        System.out.print("Enter your client ID: ");
        String clientId = scanner.nextLine();
        out.println(clientId);

        // Start a new thread to listen for messages from the server
        Thread listenerThread = new Thread(() -> {
            String serverMessage;
            try {
                while ((serverMessage = in.readLine()) != null) {
                    System.out.println(serverMessage);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
        listenerThread.start();

        // Read messages from the console and send them to the server
        String message;
        while (scanner.hasNextLine()) {
            message = scanner.nextLine();
            out.println(message);
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}

}