• # Et pour la démonstration

    Posté par (site web personnel) . En réponse au message Science-fiction : 2 applications sur le même port ?. Évalué à 1.

    Voilà, un petit exemple java bien dégeu qui illustre le truc du flag REUSEADDRESS

    Il suffit de lancer deux fois le programme (le deuxieme devrait s'appeler server TWO automatiquement). Si on attaque 127.0.0.1 avec un browser c'est bien server TWO qui répond, mais si on le tue, alors c'est server ONE qui répond.

    Si quelqu'un peut m'expliquer pourquoi on arrive à ce comportement, je suis preneur.

    import java.io.BufferedWriter;
    import java.io.OutputStreamWriter;
    import java.net.InetSocketAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.SocketException;
    import java.util.Date;

    public class Foo{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception{
     String serverName = "Server number ONE";
     if (args.length != 1){
     System.out.println("Usage: MicroServer.jar <port>");
     System.exit(1);
     }
     int port = Integer.parseInt(args[0]);
     ServerSocket server = new ServerSocket();
     try{
     server.bind(new InetSocketAddress("0.0.0.0",port));
     }
     catch (SocketException se){
     server = new ServerSocket();
     server.setReuseAddress(true);
     serverName = "Server number TWO";
     server.bind(new InetSocketAddress("localhost",port));
     }
     System.out.println(serverName + " is now listening on port " + port);
     while (true){
     Socket s = server.accept();
     System.out.println("[" + new Date().toString() + "] new connection from " + s.getInetAddress().toString());
     BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
     writer.write("<html><title>Hello</title><body>Hello, I am " + serverName + "</body></html>");
     writer.close();
     s.close(); 
     }
    }
    

    }