├── SingleThreaded ├── Client.java └── Server.java ├── Multithreaded ├── Server.java └── Client.java └── ThreadPool └── Server.java /SingleThreaded/Client.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.BufferedWriter; 3 | import java.io.IOException; 4 | import java.io.InputStreamReader; 5 | import java.io.PrintWriter; 6 | import java.net.InetAddress; 7 | import java.net.Socket; 8 | import java.net.UnknownHostException; 9 | 10 | public class Client { 11 | 12 | public void run() throws UnknownHostException, IOException{ 13 | int port = 8090; 14 | InetAddress address = InetAddress.getByName("localhost"); 15 | Socket socket = new Socket(address, port); 16 | PrintWriter toSocket = new PrintWriter(socket.getOutputStream(), true); 17 | BufferedReader fromSocket = new BufferedReader(new InputStreamReader(socket.getInputStream())); 18 | toSocket.println("Hello World from socket "+socket.getLocalSocketAddress()); 19 | String line = fromSocket.readLine(); 20 | toSocket.close(); 21 | fromSocket.close(); 22 | socket.close(); 23 | } 24 | 25 | public static void main(String[] args) { 26 | Client singleThreadedWebServer_Client = new Client(); 27 | try{ 28 | singleThreadedWebServer_Client.run(); 29 | } catch(Exception ex){ 30 | ex.printStackTrace(); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /SingleThreaded/Server.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | import java.io.PrintWriter; 5 | import java.net.ServerSocket; 6 | import java.net.Socket; 7 | import java.net.UnknownHostException; 8 | 9 | public class Server { 10 | 11 | public void run() throws IOException, UnknownHostException{ 12 | int port = 8010; 13 | ServerSocket socket = new ServerSocket(port); 14 | socket.setSoTimeout(20000); 15 | while(true){ 16 | System.out.println("Server is listening on port: "+port); 17 | Socket acceptedConnection = socket.accept(); 18 | System.out.println("Connected to "+acceptedConnection.getRemoteSocketAddress()); 19 | PrintWriter toClient = new PrintWriter(acceptedConnection.getOutputStream(), true); 20 | BufferedReader fromClient = new BufferedReader(new InputStreamReader(acceptedConnection.getInputStream())); 21 | toClient.println("Hello World from the server"); 22 | } 23 | } 24 | 25 | public static void main(String[] args){ 26 | Server server = new Server(); 27 | try{ 28 | server.run(); 29 | }catch(Exception ex){ 30 | ex.printStackTrace(); 31 | } 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /Multithreaded/Server.java: -------------------------------------------------------------------------------- 1 | import java.io.IOException; 2 | import java.io.PrintWriter; 3 | import java.net.ServerSocket; 4 | import java.net.Socket; 5 | import java.util.function.Consumer; 6 | 7 | public class Server { 8 | public Consumer getConsumer() { 9 | return (clientSocket) -> { 10 | try (PrintWriter toSocket = new PrintWriter(clientSocket.getOutputStream(), true)) { 11 | toSocket.println("Hello from server " + clientSocket.getInetAddress()); 12 | } catch (IOException ex) { 13 | ex.printStackTrace(); 14 | } 15 | }; 16 | } 17 | 18 | public static void main(String[] args) { 19 | int port = 8010; 20 | Server server = new Server(); 21 | 22 | try { 23 | ServerSocket serverSocket = new ServerSocket(port); 24 | serverSocket.setSoTimeout(70000); 25 | System.out.println("Server is listening on port " + port); 26 | while (true) { 27 | Socket clientSocket = serverSocket.accept(); 28 | 29 | // Create and start a new thread for each client 30 | Thread thread = new Thread(() -> server.getConsumer().accept(clientSocket)); 31 | thread.start(); 32 | } 33 | } catch (IOException ex) { 34 | ex.printStackTrace(); 35 | } 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /ThreadPool/Server.java: -------------------------------------------------------------------------------- 1 | import java.io.IOException; 2 | import java.io.PrintWriter; 3 | import java.net.ServerSocket; 4 | import java.net.Socket; 5 | import java.util.concurrent.ExecutorService; 6 | import java.util.concurrent.Executors; 7 | 8 | public class Server { 9 | private final ExecutorService threadPool; 10 | 11 | public Server(int poolSize) { 12 | this.threadPool = Executors.newFixedThreadPool(poolSize); 13 | } 14 | 15 | public void handleClient(Socket clientSocket) { 16 | try (PrintWriter toSocket = new PrintWriter(clientSocket.getOutputStream(), true)) { 17 | toSocket.println("Hello from server " + clientSocket.getInetAddress()); 18 | } catch (IOException ex) { 19 | ex.printStackTrace(); 20 | } 21 | } 22 | 23 | public static void main(String[] args) { 24 | int port = 8010; 25 | int poolSize = 10; // Adjust the pool size as needed 26 | Server server = new Server(poolSize); 27 | 28 | try { 29 | ServerSocket serverSocket = new ServerSocket(port); 30 | serverSocket.setSoTimeout(70000); 31 | System.out.println("Server is listening on port " + port); 32 | 33 | while (true) { 34 | Socket clientSocket = serverSocket.accept(); 35 | 36 | // Use the thread pool to handle the client 37 | server.threadPool.execute(() -> server.handleClient(clientSocket)); 38 | } 39 | } catch (IOException ex) { 40 | ex.printStackTrace(); 41 | } finally { 42 | // Shutdown the thread pool when the server exits 43 | server.threadPool.shutdown(); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Multithreaded/Client.java: -------------------------------------------------------------------------------- 1 | 2 | import java.io.BufferedReader; 3 | import java.io.IOException; 4 | import java.io.InputStreamReader; 5 | import java.io.PrintWriter; 6 | import java.net.InetAddress; 7 | import java.net.Socket; 8 | import java.net.UnknownHostException; 9 | 10 | public class Client { 11 | 12 | public Runnable getRunnable() throws UnknownHostException, IOException { 13 | return new Runnable() { 14 | @Override 15 | public void run() { 16 | int port = 8010; 17 | try { 18 | InetAddress address = InetAddress.getByName("localhost"); 19 | Socket socket = new Socket(address, port); 20 | try ( 21 | PrintWriter toSocket = new PrintWriter(socket.getOutputStream(), true); 22 | BufferedReader fromSocket = new BufferedReader(new InputStreamReader(socket.getInputStream())) 23 | ) { 24 | toSocket.println("Hello from Client " + socket.getLocalSocketAddress()); 25 | String line = fromSocket.readLine(); 26 | System.out.println("Response from Server " + line); 27 | } catch (IOException e) { 28 | e.printStackTrace(); 29 | } 30 | // The socket will be closed automatically when leaving the try-with-resources block 31 | } catch (IOException e) { 32 | e.printStackTrace(); 33 | } 34 | 35 | } 36 | }; 37 | } 38 | 39 | public static void main(String[] args){ 40 | Client client = new Client(); 41 | for(int i=0; i<100; i++){ 42 | try{ 43 | Thread thread = new Thread(client.getRunnable()); 44 | thread.start(); 45 | }catch(Exception ex){ 46 | return; 47 | } 48 | } 49 | return; 50 | } 51 | } 52 | --------------------------------------------------------------------------------