103 lines
2.3 KiB
Java
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|