J'ai implémenté le code suivant pour créer un socket de serveur SSL.Problème lors de la réutilisation de la même socket de serveur
public void createConnection(){
port =8888;
listen = true;
isSvrRuning = true;
try {
String KEYSTORE = Config.KEYSTORE_FILE;
// String KEYSTORE = "/u04/app/ato/data/keystore/ATradSvrKeyStore";
char[] KEYSTOREPW = "abcd".toCharArray();
char[] KEYPW = "abcd".toCharArray();
com.sun.net.ssl.TrustManagerFactory tmf;
boolean requireClientAuthentication;
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
java.security.KeyStore keystore = java.security.KeyStore.getInstance(
"JKS");
keystore.load(new FileInputStream(KEYSTORE), KEYSTOREPW);
com.sun.net.ssl.KeyManagerFactory kmf = com.sun.net.ssl.KeyManagerFactory.getInstance("SunX509");
kmf.init(keystore, KEYPW);
com.sun.net.ssl.SSLContext sslc = com.sun.net.ssl.SSLContext.getInstance("SSLv3");
tmf = com.sun.net.ssl.TrustManagerFactory.getInstance("sunx509");
tmf.init(keystore);
sslc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLServerSocketFactory ssf = sslc.getServerSocketFactory();
ssocket = (SSLServerSocket) ssf.createServerSocket();
try {
ssocket.setReuseAddress(true);
} catch (SocketException ex) {
loggerSvr.log(Level.SEVERE, "SocketException in setting timeout for serverSocket.");
ex.printStackTrace();
}
ssocket.bind(new InetSocketAddress(port));
ssocket.setNeedClientAuth(true);
while (listen) {
//wait for client to connect//
socket = ssocket.accept();
// here goes the code which need to handle a new connection
}
}catch(){
//there are several catch blocks to catch all checked exceptions
}
}
S'il y a un problème ou une exception dans la prise ci-dessus je ferme la prise et recréez une autre socket serveur en appelant méthode ci-dessus. Mais le problème est que je ne peux pas recréer le socket serveur en utilisant le même port. Il donne l'erreur suivante quand j'essaye de le faire.
Server socket allocation error for the specific port
J'ai également définir la propriété réutilisable lors de la création quelqu'un socket.can dire quel est le problème?
Merci pour votre commentaire EJP.Comme vous l'avez dit, le problème n'était pas dans ce code. Personne initialement implémenter le code ci-dessus n'a pas exposé l'exception réelle. Donc, je ne pouvais pas non plus comprendre où est l'arror réelle au départ. Le vrai problème était ailleurs. La prochaine fois je m'assurerai d'indiquer l'erreur réelle. J'ai également remarqué que la plupart de la méthode utilisée dans le code ci-dessus est obsolète. Pouvez-vous me dire quel genre de risque que j'ai avec le code ci-dessus. Merci encore pour les commentaires – nath
C'est OK sauf ce que j'ai déjà mentionné. – EJP