2010-12-02 3 views
0

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?

Répondre

0

Enfin, je pouvais comprendre le problème. Mais le problème était ailleurs. Le code ci-dessus n'a pas d'arrogance. Initial Implementer du code n'a pas révélé la véritable erreur. Voilà pourquoi je ne pouvais pas comprendre. Pardonnez-moi sur le problème.

0

Erreur d'allocation de socket serveur pour le port spécifique

Ce n'est pas un message d'exception Java. Cela vient d'un point non révélé dans votre code. A en juger par l'exactitude du message d'erreur que vous imprimez si setReuseAddress() échoue, il se peut que cela n'ait rien à voir avec la condition d'erreur réelle. Comme vous sont appelant setReuseAddress (true) Je trouve plutôt improbable que ce soit un problème de liaison. Vous auriez à nous dire l'exception et le message d'erreur réel.

Il y a une morale ici: ne faites pas vos propres messages d'erreur; utilisez celui fourni dans l'exception.

Ce code est également périmé depuis dix ans. Tout le contenu de com.sun.net.ssl. * Doit être remplacé par javax.net.ssl. * Et vous n'avez pas besoin d'ajouter le fournisseur. @since JDK 1.3.

+0

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

+0

C'est OK sauf ce que j'ai déjà mentionné. – EJP

Questions connexes