├── ChatSystemClient.java ├── ChatSystemServer.java └── README.md /ChatSystemClient.java: -------------------------------------------------------------------------------- 1 | 2 | import java.io.*; 3 | import java.net.InetAddress; 4 | import java.net.Socket; 5 | 6 | public class ChatSystemClient { 7 | public static void main(String[] args) throws IOException { 8 | 9 | InetAddress addressOfTheServer = InetAddress.getByName("127.0.0.1"); 10 | 11 | // Connecting to the server 12 | Socket client = new Socket(addressOfTheServer, 3000); 13 | 14 | 15 | // Getting the server input/output streams 16 | BufferedReader inputFromServer = new BufferedReader(new InputStreamReader(client.getInputStream())); 17 | PrintWriter outputStream = new PrintWriter(new OutputStreamWriter(client.getOutputStream())); 18 | 19 | // Getting the keyboard input stream 20 | BufferedReader keyboardInput = new BufferedReader(new InputStreamReader(System.in)); 21 | 22 | Thread messagePrinter = new Thread(new Runnable() { 23 | @Override 24 | public void run() { 25 | while(true) { 26 | try { 27 | String messageFromServer = inputFromServer.readLine(); 28 | if(messageFromServer != null) { 29 | System.out.println("Message from the server: " + messageFromServer); 30 | } 31 | } catch (IOException e) { 32 | e.printStackTrace(); 33 | } 34 | 35 | } 36 | } 37 | }); 38 | 39 | // Start the message printer Thread 40 | messagePrinter.start(); 41 | 42 | while(true) { 43 | 44 | // Reading message from the keyboard 45 | String line = keyboardInput.readLine(); 46 | 47 | // Sending the message to the server 48 | outputStream.println(line); 49 | outputStream.flush(); 50 | 51 | } 52 | 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /ChatSystemServer.java: -------------------------------------------------------------------------------- 1 | 2 | import java.io.*; 3 | import java.net.InetAddress; 4 | import java.net.ServerSocket; 5 | import java.net.Socket; 6 | 7 | 8 | public class ChatSystemServer { 9 | 10 | public static void main(String[] args) throws IOException, InterruptedException { 11 | 12 | InetAddress address = InetAddress.getByName("localhost"); 13 | ServerSocket server = new ServerSocket(3000,3, address); 14 | 15 | while(true) { 16 | 17 | Socket newClient = server.accept(); 18 | 19 | ChatServerWorker serverWorker = new ChatServerWorker(newClient); 20 | serverWorker.start(); 21 | 22 | } 23 | } 24 | } 25 | 26 | class ChatServerWorker extends Thread { 27 | 28 | private Socket clientSocket; 29 | 30 | public ChatServerWorker(Socket clientSocket) { 31 | this.clientSocket = clientSocket; 32 | } 33 | 34 | @Override 35 | public void run() { 36 | try { 37 | startWorker(); 38 | } catch (IOException e) { 39 | e.printStackTrace(); 40 | } 41 | } 42 | 43 | void startWorker() throws IOException { 44 | 45 | 46 | // Getting the input/output streams of the client 47 | BufferedReader clientInput = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 48 | PrintWriter clientOutput = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream())); 49 | 50 | // Getting the keyboard input stream 51 | BufferedReader keyboardInput = new BufferedReader(new InputStreamReader(System.in)); 52 | 53 | 54 | Thread messagePrinter = new Thread(new Runnable() { 55 | @Override 56 | public void run() { 57 | while(true) { 58 | if(clientSocket.isClosed()) { 59 | Thread.interrupted(); 60 | break; 61 | } 62 | try { 63 | if(clientInput == null) { 64 | break; 65 | } 66 | 67 | String messageFromTheClient = clientInput.readLine(); 68 | if(messageFromTheClient != null) { 69 | System.out.println("Message from the client: " + messageFromTheClient); 70 | } 71 | 72 | if(messageFromTheClient.equals("exit")) { 73 | clientSocket.close(); 74 | break; 75 | } 76 | 77 | } catch (IOException e) { 78 | e.printStackTrace(); 79 | } 80 | 81 | } 82 | } 83 | }); 84 | 85 | // Starting the message printer on a new Thread 86 | messagePrinter.start(); 87 | 88 | while(true) { 89 | if(clientSocket.isClosed()) { 90 | break; 91 | } 92 | String messageBack = keyboardInput.readLine(); 93 | 94 | if(messageBack.equals("exit")) { 95 | Thread.interrupted(); 96 | } 97 | clientOutput.println(messageBack); 98 | clientOutput.flush(); 99 | 100 | } 101 | 102 | clientSocket.close(); 103 | 104 | } 105 | 106 | } 107 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ChatSystem-Java 2 | Java chat system.
3 | Here's the code from the client and server side. 4 | 5 | --------------------------------------------------------------------------------