1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| // communication réseau
import java.net.ServerSocket ;
import java.net.Socket ;
// flux e/s
import java.io.ObjectInputStream ;
import java.io.ObjectOutputStream ;
// collections
import java.util.HashMap ;
// lecture au clavier
import java.util.Scanner ;
// exceptions
import java.io.IOException ;
public class Serveur extends ServerSocket {
// liste des clients
private HashMap<Socket, Flux> clients ;
/* constructeur par défaut */
public Serveur() throws IOException {
super(1705) ;
// debug - serveur démarré
System.out.println("serveur démarré") ;
this.startServeur() ;
}
/* lance le serveur */
private void startServeur() throws IOException {
// instance de la des clients
this.clients=new HashMap<Socket, Flux>() ;
// debug - liste des clients créée
System.out.println("liste des clients créée" +"\n" +"attente de connexion d'un client") ;
// écoute des connexion entrante
Socket dernierClient=this.accepterConnexion() ;
// debug - client connecté
System.out.println("client connecté" +"\n" +"le serveur est prêt à envoyer des messages au client") ;
// debug - envoi constant de messages au client
Scanner sc=new Scanner(System.in) ;
while (true) {
System.out.print("Entre un message : ") ;
String s=sc.nextLine() ;
// envoi au client
this.envoyer(dernierClient, s) ;
}
}
/* écoute des connexions entrantes */
private Socket accepterConnexion() throws IOException {
Socket client=super.accept() ;
// ouverture de ses flux
Flux f=new Flux(client) ;
// ajout du client dans la liste
this.clients.put(client, f) ;
return client ;
}
/* envoie des données à un client */
private void envoyer(Socket client, Object o) throws IOException {
// récupération du flux du client
ObjectOutputStream out=this.clients.get(client).getOutputStream() ;
// écriture
out.writeObject(o) ;
// vidange du flux
out.flush() ;
// fermeture de la variable
out=null ;
}
/* lancement de l'application */
public static void main(String[] args) {
try {
new Serveur() ;
} catch (IOException ioe) {
ioe.printStackTrace() ;
}
}
} |