Files
Projet-UDP/ClientServeur/src/Server.java

58 lines
1.7 KiB
Java

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