Précédent   Forum des professionnels en informatique > Java > Serveurs, conteneurs, et Java EE > Autres
Autres Vos questions sur les autres serveurs d'application Java.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/12/2011, 03h24   #1
Invité régulier
 
Homme
téléconseiller informatique
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : téléconseiller informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 5
Points : 5
Par défaut Arrêt impossible d'un serveur Java en utilisant ServerSocket lors du 2ème essai

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.
Code :
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
-----------------------------------------------------------------------------------
quelqu'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******************/
Code :
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
}
/****************Fin classe serveurB*****************/
/****************classe methode********************/
Code :
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();
}
 
}
/***************fin classe methode****************/
abousaadprogrammer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 09h13   #2
Modérateur
 
Avatar de tchize_
 
Homme
Responsable de service informatique
Inscription : avril 2007
Messages : 16 196
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Belgique

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Service public

Informations forums :
Inscription : avril 2007
Messages : 16 196
Points : 25 344
Points : 25 344
Envoyer un message via MSN à tchize_ Envoyer un message via Skype™ à tchize_
les paramètres des méthodes en java sont toujours passés par copie, autrement dit, quand tu fait:
Code :
1
2
3
4
void demarrage(ServerSocket skv){
try {
 
skv = new ServerSocket(port);
tu nee change pas la socket du coté de l'appelant. Si l'appelant a besoin de récupérer la socket, il faut la lui retourner (valeur de retour)

Code :
1
2
3
4
5
ServerSocket demarrage(){
try {
 
ServerSocket skv = new ServerSocket(port);
return skv;
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et
"Votre génitrice tute des pédoncules au pandémonium" (le conjurateur, 1973)
tchize_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 16h08   #3
Invité régulier
 
Homme
téléconseiller informatique
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : téléconseiller informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 5
Points : 5
Par défaut ça marche maintenatant

merci tchize t'a raison il faut renvoyer la valeur à la classe qui a appelé la methode demarrer() et stop()
voila les modification que j'ai efefctué
/******classe serveurB***********/
Code :
1
2
3
4
5
6
7
8
9
10
mt.arret.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){
	socketServeur=mt.stop(socketServeur);
	mt.iconeisarret();
}});

mt.demar.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){
		
	socketServeur=mt.demarrage(socketServeur);
	mt.iconeisdemar();
}});
/******classe methode***********/
Code :
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
//cette methode permet de demarrer le serveur
ServerSocket  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());
		}
	return skv;	
}
//cette methode permet d'arrete le serveur
ServerSocket stop(ServerSocket skv){
	try {
		skv.close();
		System.out.println("arret du serveur");
		System.out.println("server is stopped ? : "+skv.isClosed());
		
	} catch (IOException e) {
		
		System.out.println(e.getMessage());
	}
	return skv;	
}
ce qui m'est arrivé c'est que je ne suis pas habitué à travailler de cette façon en mettant les méthodes dans une classe à part je mets tous dans une seules classe.
maintenant je peut continuer mon serveur multithread ou plusieurs client se connecte sur le serveur pour avoir des info personnel stoqué dans une base de donné et qui sont affiché sous forme d'une table chez les client
la table est à jours chaque fois qu'il y a une modification.
merci de nouveau.
je pourrais avoir besoin pour les thread
s'il y a qque chose tu me trouve au forum.
tchao
abousaadprogrammer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2011, 13h31   #4
Invité régulier
 
Homme
téléconseiller informatique
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : téléconseiller informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 5
Points : 5
Par défaut plontage de le barre de tache lors de l'arret du serveur

j'ai un un autre probleme avec mon serveur multithread quand je l'arrete pour la 2 eme fois à partir de la barre du tache system
celle-ci est plonté .mais le serveur continuer à servir ses client
il y a un seulement un echange de messages enttre client et serveur les message echangé son enregistrés dans un fichier journal coté client et serveur.
quelq'un peut me donner une solution
voici mon programme serveur
/*************classe serveurA *************/
Code :
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
import java.net.*;
import java.util.Date;
import java.awt.AWTException;
import java.awt.EventQueue;
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.*;
public class serveurA extends Thread {
final static int port = 9632;
static Socket socket;
Date dt=new Date();
static String fmessage ;
static Socket socketClient;
static FileWriter fichserver;
static ServerSocket socketServeur;
static InetAddress adrLocale;
static MenuItem arret,aide,quit,demar;
static serveurA t ;
static Runnable runner;
static boolean actif =true;
static TrayIcon trayIcon;
static ThreadGroup tgp = new ThreadGroup("groupe");
static ThreadGroup[] GroupesThreads ;
String jours[] = {"Dimanche","Lundi","Mardi","Mercredi","Jeudi","Samedi","Dimache"};
static int i=0;
static String nomterad="";
static Console console;
public static void main(String[] args) {
 
if (SystemTray.isSupported()) {
 
SystemTray tray = SystemTray.getSystemTray();
 
Image image = Toolkit.getDefaultToolkit().getImage("icon.jpg");
 
PopupMenu 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) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
}
 
arret.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){
//System.exit(0);
 
arret();
 
 
 
 
}});
demar.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){
//System.exit(0);
 
demarrage();
 
 
 
 
}});
quit.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){
System.exit(0);
 
}});
 
 
} else System.err.println("Fontion non supportée");
 
demarrage();
 
}
 
 
 
 
 
 
static void arret(){
System.out.println("arret du serveur");
 
try {
//socketClient.close();
//socket.close();
actif=false;
//if(socket!=null) socket.close();
if(socketClient!=null)socketClient.close();
// t.stop();
socketServeur.close();
 
 
//System.out.println("Nombre total de threads dans le groupe apres : " + Thread.currentThread().getThreadGroup().activeCount());
 
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
}
}
 
static void demarrage(){
actif=true;
try {
adrLocale=InetAddress.getLocalHost();
socketServeur = new ServerSocket(port);
System.out.println("Lancement du serveur");
while (true) {
socketClient = socketServeur.accept();
t = new serveurA(socketClient);
t.start();
 
}
 
 
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void controle(String msg) {
if (msg.equals("demar")) demarrage();
else if (msg.equals("arret")) arret();
else if (msg.equals("exit")) System.exit(0);
}
public String getdate() {
int year=dt.getYear()+1900;
return jours[dt.getDay()]+" "+dt.getDate()+"/"+dt.getMonth()+"/"+year
+" à "+dt.getHours()+":"+dt.getMinutes()+":"+dt.getSeconds();
}
 
public serveurA(Socket socketA) {
this.socket = socketA;
}
public void run() {
 
try {
 
fichserver = new FileWriter ("journalserveur.txt",true);
String message = "";
System.out.println("Connexion avec le client : " + socket.getInetAddress());
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());
message = getdate()+" "+in.readLine()+"utilsant le port : "+socket.getPort()+"\r\n";;
//System.out.println("serveur : "+message);
fmessage+=message;
out.println("bonjour c'est le serveur avec adresse : "+adrLocale.getHostAddress()+" et Nom : "+adrLocale.getHostName());
} catch (Exception e) {
System.out.println(e.getMessage());
}
 
try {
fichserver.write(fmessage);
fmessage="";
fichserver.close();
socketClient.close();
socket.close();
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
}
}
 
}
/************fin classe*********/
/************classe client*********/
Code :
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
import java.net.*;
import java.util.Date;
import java.io.*;
public class clientA {
final static int port = 9632;
static Date dt=new Date();
public static void main(String[] args) {
 
 
Socket socket;
DataInputStream userInput;
PrintStream theOutputStream;
try {
FileWriter fichclient = new FileWriter("journalclientB.txt",true);
InetAddress serveur = InetAddress.getByName("127.0.0.1");
socket = new Socket("localhost", port);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());
out.println("connexion du client "+clientA.class.getName()+" ");
//System.out.println("client : "+in.readLine());
fichclient.write(dt.toLocaleString()+" "+in.readLine());
fichclient.write("\r\n");
fichclient.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
/***************classe clientA****************/

abousaadprogrammer
Membre
Membre

Messages: 4
Inscription: 27 Nov 2011 04:56
abousaadprogrammer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 02h43   #5
Invité régulier
 
Homme
téléconseiller informatique
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : téléconseiller informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 5
Points : 5
Par défaut j'ai trouvé la solution au problème de plontage

il faut appeler la méthode dans un thread car il y a déjà un thread lancé entrain d'attendre les requete des clients
j'ai modifié seulement le code suivant:

demar.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){
//System.exit(0);

t = new Thread() {
public void run() {
demarrage();
}};
t.start();
}});
arret.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){
t = new Thread() {
public void run() {
arret();
}};
t.start();
}});
abousaadprogrammer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h57.


 
 
 
 
Partenaires

Hébergement Web