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.
/**
* @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();
}
}
# Et pour la démonstration
Posté par cho7 (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{
}