Files
TP1-Arsir/src/Ex4/Server.java
2026-02-04 10:07:41 +01:00

103 lines
2.3 KiB
Java

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;
}
}
}
}