├── README.md └── ChatServer.java /README.md: -------------------------------------------------------------------------------- 1 | # java-chat-app 2 | A simple command-line chat application in Java. 3 | -------------------------------------------------------------------------------- /ChatServer.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.net.*; 3 | import java.util.*; 4 | 5 | public class ChatServer { 6 | private static Set clientWriters = new HashSet<>(); 7 | 8 | public static void main(String[] args) throws Exception { 9 | System.out.println("Chat server started..."); 10 | ServerSocket serverSocket = new ServerSocket(12345); 11 | while (true) { 12 | new ClientHandler(serverSocket.accept()).start(); 13 | } 14 | } 15 | 16 | private static class ClientHandler extends Thread { 17 | private Socket socket; 18 | private PrintWriter out; 19 | private BufferedReader in; 20 | 21 | public ClientHandler(Socket socket) { 22 | this.socket = socket; 23 | } 24 | 25 | public void run() { 26 | try { 27 | in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 28 | out = new PrintWriter(socket.getOutputStream(), true); 29 | synchronized (clientWriters) { 30 | clientWriters.add(out); 31 | } 32 | 33 | String message; 34 | while ((message = in.readLine()) != null) { 35 | System.out.println("Received: " + message); 36 | for (PrintWriter writer : clientWriters) { 37 | writer.println(message); 38 | } 39 | } 40 | } catch (IOException e) { 41 | System.out.println(e.getMessage()); 42 | } finally { 43 | try { 44 | socket.close(); 45 | } catch (IOException e) { 46 | System.out.println(e.getMessage()); 47 | } 48 | synchronized (clientWriters) { 49 | clientWriters.remove(out); 50 | } 51 | } 52 | } 53 | } 54 | } 55 | --------------------------------------------------------------------------------