2010-06-28 7 views
4

J'ai une application qui accepte les connexions SSL sur un port particulier. Lorsque j'arrête l'application à partir de la console d'administration de Websphere, puis que je la redémarre, une exception se produit et se plaint que le port est toujours utilisé. Je dois arrêter et redémarrer Websphere entièrement pour que l'application fonctionne à nouveau.Arrêter d'écouter un port

Quelle est la bonne façon d'arrêter d'écouter un port en Java?

Répondre

2

Je ne suis pas sûr de la façon dont cela est fait en Java, mais la fermeture du socket (.close() sur le ServerSocket?) Fermera le port. Cependant, de nombreux systèmes d'exploitation ne vous permettent pas de réutiliser le même port pendant environ 30 secondes après l'avoir fermé pour empêcher les anciens messages d'être lus par la nouvelle connexion.

1

Fermez simplement la poignée de la prise, quelque chose comme yourSocket.close(). pourrait aider.

+0

Merci, mais ma demande accepte les connexions entrantes dans une boucle. Comment puis-je savoir si Websphere ferme mon application? – AbdullahC

+0

Si vous ouvrez un port, comment WebSphere pourrait-il entrer et fermer cela pour vous? Le serveur d'applications arrête votre application et les ressources qui ne sont pas gérées par les conteneurs WAS ne seront pas fermées car App Server ne dispose d'aucune information à leur sujet. L'application doit être responsable de la fermeture des ports. Aussi, comme mentionné par Bob Turbo, les ports pourraient ne pas être disponibles pendant une courte période après leur fermeture (ceci est effectué par le système d'exploitation). – Manglu

+1

@Hippo: Idéalement, l'application qui ouvre le port est responsable de la fermeture gracieuse de ce port. Dans votre cas, vous devez garder une trace (dans un tableau/liste, etc) de tous les ports qui sont ouverts dans votre boucle. –

0
ServerSocket ss = new ServerSocket(); 
ss.setReuseAddress(true); 
ss.bind(port);