Ajouter un commentaire

abousaadprogrammer
arret impossible d'un serveur java la 2 eme fois

salut
j'ai un soucis avec un serveur utilisant ServerSocket sur le port 9632 en attente
je démarre et j’arrête le serveur à partir d'une barre de tache système.
je démarre le serveur et je l’arrête successivement
la 2 ème fois il ne s’arrête pas alors que la méthode ServerSocket.isclosed() renvoi true et je vois que le serveur est toujours en ecoute sur le port 9632 en tapant la commande netstat -a
Voila ce qu’il donne lors de l"exécution.
----------------------------
Lancement du serveur
server is stopped ? : false
arret du serveur
server is stopped ? : true
Lancement du serveur
server is stopped ? : false
arret du serveur
server is stopped ? : true
le serveur n'a pas pu etre demarré : Address already in use: JVM_Bind
-----------------------------------------------------------------------------------
quelq'un peut me donner une solution pour qu'il s’arrête correctement
voila mon programme composé de 2 classe
classe serveurB : la classe principale
classe methode ou j'ai reuni tous les methodes utilisés
pour le tester il vous faut mettre une icone (image ) que vous devriez la mettre dans le répertoire du programme
ici j'ai la nommé icon.jpg
/************classe serveurB******************/
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.ServerSocket;
public class serveurB extends Thread{
methode mt=new methode();
ServerSocket socketServeur;
final static int port = 9632;
public static void main(String[] args) {
new serveurB();
}

public serveurB(){
mt.barretache();
//demarrage serveur pour la 1 ere fois
try {
socketServeur = new ServerSocket(port);
mt.iconeisdemar();
System.out.println("Lancement du serveur");
System.out.println("server is stopped ? : "+socketServeur.isClosed());
} catch (IOException e) {
System.out.println(e.getMessage());
}
mt.quit.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){
System.exit(0);
}});
//fin evenement quit

mt.arret.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){
mt.stop(socketServeur);
mt.iconeisarret();
}});

mt.demar.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){

mt.demarrage(socketServeur);
mt.iconeisdemar();
}});

}

//fin classe
}
/****************Fin classe serveurB*****************/
/****************classe methode********************/
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;

public class methode {
//declaration des variable
//serveurB sb=new serveurB();
TrayIcon trayIcon;
MenuItem arret,aide,quit,demar;
PopupMenu popup;
boolean actif ;
InetAddress ab;
final int port = 9632;

//cette methode permet de creer une barre de tache avec menue demarrer,arreter et quitter
void barretache(){

SystemTray tray = SystemTray.getSystemTray();

Image image = Toolkit.getDefaultToolkit().getImage("icon.jpg");

popup = new PopupMenu();
quit = new MenuItem("quitter");
arret = new MenuItem("Arreter");
demar = new MenuItem("Demarrer");
popup.add(arret);
popup.addSeparator();
popup.add(demar);
popup.addSeparator();
popup.add(quit);

//image, message dans une bulle d'aide, et menu pop-up

trayIcon = new TrayIcon(image, "Serveur de donnée", popup);
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
trayIcon.displayMessage("serveur de fichier omar Bienvenue","Le System Tray en action !",TrayIcon.MessageType.INFO);
}
};
trayIcon.setImageAutoSize(true);
trayIcon.addActionListener(actionListener);
try {
tray.add(trayIcon);
} catch (AWTException e) {

System.out.println(e.getMessage());
}
}
//cette methode permet de demarrer le serveur
void demarrage(ServerSocket skv){
try {

skv = new ServerSocket(port);
System.out.println("Lancement du serveur");
System.out.println("server is stopped ? : "+skv.isClosed());

} catch (Exception e) {
System.out.println("le serveur n'a pas pu etre demarré : "+e.getMessage());
}
}
//cette methode permet d'arrete le serveur
void stop(ServerSocket skv){
try {
skv.close();

} catch (IOException e) {

System.out.println(e.getMessage());
}

System.out.println("arret du serveur");
System.out.println("server is stopped ? : "+skv.isClosed());
}
//cette methode permet de desactiver le lmenu arret quand le serveur est arreté
void iconeisarret(){
arret.disable(); demar.enable();
}
//cette methode permet de desactiver le lmenu arret quand le serveur est arreté
void iconeisdemar(){
demar.disable(); arret.enable();
}

}

/***************fin classe methode****************/

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 W     W  K  K  N   N   QQQ     AA  
W W K K NN N Q Q A A
W W W KK N N N Q Q AAAA
W W W K K N NN Q QQ A A
W W K K N N QQQQ A A
Q