09 Mar2016
Programmation client serveur avec les sockets : factoriel d'un nombre
Objectifs
- Création d'une Socket Client.
- Création d'une Socket Serveur.
Énoncé
Développer une application client/serveur. Le client transmet un nombre entier au serveur, ensuite le serveur calcul son factoriel et retransmet le résultat au client.
La classe client
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class Client { public static void main(String args[]) { try { Socket socket = new Socket(InetAddress.getLocalHost(), 2009); DataOutputStream out = new DataOutputStream(socket.getOutputStream(); Scanner sc = new Scanner(System.in); System.out.print("Entrez un nombre : "); int number = sc.nextInt(); out.writeInt(number); out.flush(); DataInputStream in = new DataInputStream(socket.getInputStream()); System.out.println("\nfact(" + number + ") = " + in.readLong()); } catch (UnknownHostException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } }
La classe Serveur
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.logging.Level; import java.util.logging.Logger; public class Server { private static long factoriel(int n) { if (n == 0 || n == 1) { return 1; } else if (n == 2) { return 2; } else { return n * factoriel(n - 1); } } public static void main(String args[]) { try { ServerSocket server = new ServerSocket(2009); Socket socket = server.accept(); DataInputStream in = new DataInputStream(socket.getInputStream()); int number = in.readInt(); System.out.println("Nombre reçu sur le serveur = " + number); DataOutputStream out = new DataOutputStream(socket.getOutputStream()) out.writeLong(factoriel(number)); out.flush(); out.close(); } catch (IOException ex) { Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); } } }