refactor: split server into mutliples methods

This commit is contained in:
2025-03-31 21:45:32 +02:00
parent d3b523048f
commit f0ea538c21
4 changed files with 109 additions and 99 deletions

View File

@@ -1,7 +1,7 @@
package clientserver; package clientserver;
import clientserver.client.Client; import clientserver.client.Client;
import clientserver.server.ClientHandler; import clientserver.server.Server;
public class App { public class App {
@@ -28,7 +28,7 @@ public class App {
case "server": case "server":
// Run the server // Run the server
System.out.println("Starting server..."); System.out.println("Starting server...");
ClientHandler.main(new String[] {}); Server.run();
break; break;
default: default:
System.out.println("Unknown mode: " + mode); System.out.println("Unknown mode: " + mode);

View File

@@ -6,6 +6,22 @@ import java.net.InetAddress;
public class Client { public class Client {
InetAddress clientAddress;
int clientPort;
public InetAddress getClientAddress() {
return clientAddress;
}
public int getClientPort() {
return clientPort;
}
public Client(InetAddress address, int port) {
this.clientAddress = address;
this.clientPort = port;
}
public static void main(String[] args) { public static void main(String[] args) {
try { try {
// 1 - Création du canal avec un port libre // 1 - Création du canal avec un port libre

View File

@@ -1,97 +0,0 @@
package clientserver.server;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
public class ClientHandler {
public static void main(String[] args) {
int port = 6666;
boolean running = true;
DatagramSocket socketServer = null;
try {
socketServer = new DatagramSocket(null);
// 2 - Réservation du port
InetSocketAddress address = new InetSocketAddress(
"localhost",
port
);
socketServer.bind(address);
} catch (Exception e) {
e.printStackTrace();
}
while (running) {
try {
// 1 - Création du canal
// 3 - Recevoir
byte[] recues = new byte[1024]; // tampon de réception
DatagramPacket receivedPacket = new DatagramPacket(
recues,
recues.length
);
socketServer.receive(receivedPacket);
InetAddress clientAddress = receivedPacket.getAddress();
int clientPort = receivedPacket.getPort();
System.out.println(
"Nouveau client : @" + clientAddress + ":" + clientPort
);
DatagramSocket socket = new DatagramSocket(); // Reserve new port
String response = "PORT:" + socket.getLocalPort();
System.out.println(response);
byte[] envoyees; // tampon d'émission
envoyees = response.getBytes();
DatagramPacket packetToSend = new DatagramPacket(
envoyees,
envoyees.length,
clientAddress,
clientPort
);
socketServer.send(packetToSend);
Thread thread = new Thread(() -> createThread(socket));
thread.start();
} catch (Exception e) {
System.err.println(e);
}
}
socketServer.close();
}
public static void createThread(DatagramSocket socketClientThread) {
try {
byte[] recues = new byte[1024]; // tampon de réception
DatagramPacket receivedPacket = new DatagramPacket(
recues,
recues.length
);
socketClientThread.receive(receivedPacket);
String message = new String(
receivedPacket.getData(),
0,
receivedPacket.getLength()
);
System.out.println("Received message: " + message);
} catch (Exception e) {
System.err.println(e);
}
}
static void scannerUDP(int startPort, int endPort) {
try {
for (int i = startPort; i < endPort; i++) {
try (DatagramSocket socket = new DatagramSocket(i)) {} catch (
Exception e
) {
System.out.println("Port n°" + i + " déjà occupé");
}
}
} catch (Exception e) {
System.out.println(e);
}
}
}

View File

@@ -0,0 +1,91 @@
package clientserver.server;
import clientserver.client.Client;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Server {
private int mainServerPort;
private DatagramSocket mainServerSocket;
public Server(int port) {
this.mainServerPort = port;
mainServerSocket = createSocket(this.mainServerPort);
}
public Server() {
this.mainServerPort = 6666;
mainServerSocket = createSocket(this.mainServerPort);
}
private DatagramSocket createSocket(int port) {
DatagramSocket socket = null;
try {
socket = new DatagramSocket(port);
} catch (Exception e) {
System.err.println("Failed to bind server socket");
e.printStackTrace();
}
return socket;
}
private DatagramPacket read(DatagramSocket socket) {
byte[] receivedData = new byte[1024];
DatagramPacket receivedPacket = new DatagramPacket(
receivedData,
receivedData.length
);
try {
socket.receive(receivedPacket); // Blocking call
} catch (IOException e) {
e.printStackTrace();
}
return receivedPacket;
}
private Client getClient(DatagramPacket packet) {
return new Client(packet.getAddress(), packet.getPort());
}
// public void test(String[] args) {
// while (mainServerPortListening) {
// try {
// DatagramSocket socket = new DatagramSocket(); // Reserve new port
// String response = "PORT:" + socket.getLocalPort();
// System.out.println(response);
// byte[] envoyees; // tampon d'émission
// envoyees = response.getBytes();
// DatagramPacket packetToSend = new DatagramPacket(
// envoyees,
// envoyees.length,
// clientAddress,
// clientPort
// );
// mainServerSocket.send(packetToSend);
// Thread thread = new Thread(() -> createThread(socket));
// thread.start();
// } catch (Exception e) {
// System.err.println(e);
// }
// }
// mainServerSocket.close();
// }
public static void run() {
System.out.println("Server started");
Server server = new Server();
DatagramPacket packet = server.read(server.mainServerSocket);
Client client = server.getClient(packet);
System.out.println(
"Client: " +
client.getClientAddress() +
":" +
client.getClientPort()
);
}
}