import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class Server { private final DatagramSocket socket; public Server(int port) throws SocketException { this.socket = new DatagramSocket(port); new Thread(this::readMessages).start(); } public int getPort() { return this.socket.getLocalPort(); } private void sendMessage(String message, InetAddress address, int port) throws IOException { byte[] buffer = message.getBytes(); DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port); this.socket.send(packet); } private void processHandshake(DatagramPacket packet) throws IOException { String message = new String(packet.getData(), 0, packet.getLength()); String machineName = message.split(" ")[2]; System.out.println("\t[Server] Nouveau client : @" + packet.getAddress().getHostAddress() + ": " + packet.getPort()); sendMessage("Serveur " + machineName + " ready", packet.getAddress(), packet.getPort()); } private void processMessage(DatagramPacket packet) throws IOException { String message = new String(packet.getData(), 0, packet.getLength()); System.out.println("[Server] Message recieved : " + message); if (message.startsWith("hello serveur")) { processHandshake(packet); return; } sendMessage(message, packet.getAddress(), packet.getPort()); } private void readMessages() { while (true) { byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length); try { this.socket.receive(packet); processMessage(packet); } catch (IOException e) { e.printStackTrace(); break; } } } }