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.
quelqu'un peut me donner une solution pour qu'il s’arrête correctement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 ---------------------------- 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 -----------------------------------------------------------------------------------
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******************/
/****************Fin classe serveurB*****************/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 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 }
/****************classe methode********************/
/***************fin classe methode****************/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94 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(); } }
Partager