Created
June 9, 2025 18:58
-
-
Save nikhil3000/c2c555c58889b0a2de412873aba7b81c to your computer and use it in GitHub Desktop.
A simple java webserver using sockets api
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // server.java | |
| package org.example; | |
| import java.io.PrintWriter; | |
| import java.net.ServerSocket; | |
| import java.net.Socket; | |
| import java.util.ArrayList; | |
| import java.util.List; | |
| public class Server { | |
| List<PrintWriter> clientWriterList = new ArrayList<>(); | |
| public void go() { | |
| try { | |
| ServerSocket serverSocket = new ServerSocket(8080); | |
| while (true) { | |
| System.out.println("I will now wait for a connection request"); | |
| Socket socket = serverSocket.accept(); | |
| System.out.println("Processing client request"); | |
| ClientHandler clientHandler = new ClientHandler(socket, this::broadcastMessage); | |
| Thread clientThread = new Thread(clientHandler); | |
| clientThread.start(); | |
| clientWriterList.add(new PrintWriter(socket.getOutputStream())); | |
| } | |
| }catch (Exception ex) { | |
| System.out.println(ex); | |
| } | |
| } | |
| private Boolean broadcastMessage(String message) { | |
| for(int i=0;i<clientWriterList.size();i++) { | |
| clientWriterList.get(i).println(message); | |
| clientWriterList.get(i).flush(); | |
| } | |
| return true; | |
| } | |
| public static void main(String[] args) { | |
| Server server = new Server(); | |
| server.go(); | |
| } | |
| } | |
| // Client.java | |
| package org.example; | |
| import java.io.BufferedReader; | |
| import java.io.InputStreamReader; | |
| import java.io.PrintWriter; | |
| import java.net.Socket; | |
| public class Client { | |
| BufferedReader reader; | |
| PrintWriter writer; | |
| public void go() { | |
| try { | |
| System.out.println("Fetching data from server"); | |
| Socket s = new Socket("127.0.0.1", 8080); | |
| InputStreamReader inputStreamReader = new InputStreamReader(s.getInputStream()); | |
| reader = new BufferedReader(inputStreamReader); | |
| writer = new PrintWriter(s.getOutputStream()); | |
| System.out.println("Connection established"); | |
| // reader thread setup | |
| Thread readerThread = new Thread(() -> { | |
| System.out.println("client is waiting for messages from server"); | |
| try { | |
| String message; | |
| while ((message = reader.readLine()) != null) { | |
| System.out.println("read message " + message); | |
| } | |
| } catch (Exception ex) { | |
| System.out.println("error while reading from server" + ex); | |
| } | |
| System.out.println("killing listener"); | |
| }); | |
| readerThread.start(); | |
| // setting up writer to send messages to the backend chat server | |
| // anything typed in the console will be pushed to the backend | |
| BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in)); | |
| String consoleMessage; | |
| while ((consoleMessage = consoleReader.readLine()) != null) { | |
| System.out.println("read from console " + consoleMessage); | |
| writer.println(consoleMessage); | |
| writer.flush(); | |
| } | |
| } catch (Exception ex) { | |
| System.out.println(ex); | |
| } | |
| } | |
| // Run multiple instances of this client | |
| public static void main(String[] args) { | |
| Client client = new Client(); | |
| client.go(); | |
| } | |
| } | |
| // ClientHandler.java | |
| package org.example; | |
| import java.io.BufferedReader; | |
| import java.io.IOException; | |
| import java.io.InputStreamReader; | |
| import java.io.PrintWriter; | |
| import java.net.Socket; | |
| import java.util.function.Function; | |
| public class ClientHandler implements Runnable{ | |
| Socket socket; | |
| Function<String, Boolean> broadcastMessage; | |
| public ClientHandler(Socket socket, Function<String, Boolean> broadcastMessage) { | |
| this.broadcastMessage = broadcastMessage; | |
| this.socket = socket; | |
| } | |
| @Override | |
| public void run() { | |
| try { | |
| BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); | |
| String message; | |
| while((message = bufferedReader.readLine()) != null) { | |
| System.out.println("Recieved message from client " + message); | |
| broadcastMessage.apply(message); | |
| } | |
| } catch (IOException e) { | |
| throw new RuntimeException(e); | |
| } | |
| } | |
| } | |
Author
nikhil3000
commented
Jun 9, 2025
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment