diff --git a/src/Ex4/App.java b/src/Ex4/App.java new file mode 100644 index 0000000..69f32f3 --- /dev/null +++ b/src/Ex4/App.java @@ -0,0 +1,17 @@ +package Ex4; + +import java.net.InetSocketAddress; + +public class App { + public static void main(String[] args) throws Exception { + Server server = new Server(6666); + Client client = new Client(new InetSocketAddress("localhost", 6666)); + client.sendMessage("DATE"); + client.sendMessage("HOUR"); + client.sendMessage("FULL"); + client.sendMessage("CLOSE"); + + // stopping server + server.close(); + } +} diff --git a/src/Ex4/Client.java b/src/Ex4/Client.java new file mode 100644 index 0000000..74dce42 --- /dev/null +++ b/src/Ex4/Client.java @@ -0,0 +1,45 @@ +package Ex4; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.InetSocketAddress; +import java.net.Socket; + +public class Client { + + private final Socket socket; + + /** + * Create a new client + * + * @param address server adress (needed + * @throws IOException + */ + public Client(InetSocketAddress address) throws IOException { + this.socket = new Socket(address.getAddress(), address.getPort()); + + } + + public void sendMessage(String message) { + PrintWriter writer; + try { + writer = new PrintWriter(this.socket.getOutputStream(), true); + writer.println(message); + } catch (IOException e) { + e.printStackTrace(); + } + readMessage(); + } + + private void readMessage() { + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); + System.out.println("[Client] " + reader.readLine()); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/src/Ex4/Server.java b/src/Ex4/Server.java new file mode 100644 index 0000000..ebcd067 --- /dev/null +++ b/src/Ex4/Server.java @@ -0,0 +1,102 @@ +package Ex4; + +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketException; +import java.time.Instant; +import java.time.LocalDate; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +public class Server { + + private final ServerSocket serverSocket; + + public Server(int port) throws IOException { + this.serverSocket = new ServerSocket(port); + new Thread(this::listen).start(); + System.out.println("Server running on port " + getPort()); + } + + public void close() { + try { + this.serverSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public int getPort() { + return this.serverSocket.getLocalPort(); + } + + private void processConnexion(Socket socket) throws IOException { + new Thread(new Runnable() { + @Override + public void run() { + try { + readMessages(socket); + } catch (IOException e) { + e.printStackTrace(); + } + } + }).start(); + } + + private void listen() { + try { + while (true) { + Socket connexion = this.serverSocket.accept(); + processConnexion(connexion); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void readMessages(Socket socket) throws IOException { + BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); + PrintWriter writer = new PrintWriter(socket.getOutputStream(), true); + boolean done = false; + while (!done) { + String message = reader.readLine(); + Date date = Date.from(Instant.now()); + Calendar now = GregorianCalendar.getInstance(); + now.setTime(date); + System.out.println("[Server] Received " + message); + switch (message) { + case "DATE": + writer.println(LocalDate.now()); + break; + + case "HOUR": + writer.println(now.get(Calendar.HOUR_OF_DAY) + ":" + now.get(Calendar.MINUTE)); + break; + + case "FULL": + writer.println(Instant.now().toString()); + break; + + case "CLOSE": + System.out.println("[Server] Closing socket..."); + socket.close(); + done = true; + break; + + default: + break; + } + } + } + +}