Bonjour,

Je souhaite en fait inclure les threads dans mes applications clients serveurs dont voici les codes (je ne mets que la partie essentielle des échanges de données) :

Serveur :

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
for (int q = 0; q < scheduler.getNumberOfModules(); q++){
			schedulerServer = serverSocket.accept();
			ObjectOutputStream out = new ObjectOutputStream(schedulerServer.getOutputStream());
			listOfModules.add(out);
		}
 
		while (true)
		{
			scheduler.treatment(ds);
 
			// Ecriture des données sur le port (Object)
			for (ObjectOutputStream o : listOfModules){
				o.writeObject(ds);
				o.flush();
			}
		}
La partie client résulte surtout en un ObjectInputStream et est codé de la même façon, dans boucle for.

Ici, il peut y avoir plusieurs clients, d'où mes boucles for pour le serveur.

Le souci que j'ai est le suivant :

Le nombre de clients est lu depuis un fichier XML. Imaginons, que je lise qu'il y a 3 clients qui attendent mes données mais qu'un des trois ne fonctionne pas. A cause de ma boucle for, le code va échouer alors que les deux autres fonctionnent et j'aimerais que ce ne soit pas le cas.
Pour cela, je pensais introduire les threads mais j'ai essayé de les mettre et ce sans succès.

Voici ce que j'ai tenté de faire :

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
public void run() {
 
		try {
			this.schedulerServer = serverSocket.accept();
 
			ObjectOutputStream out = new ObjectOutputStream(this.schedulerServer.getOutputStream());
 
			while (true)
			{
				this.treatment(ds);
				out.writeObject(ds);
				out.flush();
			}
 
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
en faisant en sorte que ma classe hérite de Thread.

Pour que tout cela soit cohérent avec le reste de mon code, j'ai donc rajouté un constructeur (la fonction run ne se trouve pas dans une classe à part mais bien dans ma classe qui gère les échanges directement), et des attributs à ma classe.

Dans mon main, au lieu du code que j'ai montré en premier, j'ai mis :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Scheduler thread = null;
 
		for (int q = 0; q < scheduler.getNumberOfModules(); q++){
			thread = new Scheduler(ds, serverSocket);
		}
 
		for (int q = 0; q < scheduler.getNumberOfModules(); q++){
			thread.start();
		}
Cela ne fonctionne pas du tout et je ne sais pas pourquoi.
Qu'ai-je mal compris dans la mise en place des threads ?
Faut-il aussi modifier les clients ?
De plus, si effectivement un ne fonctionne pas, cela empêchera-t-il les autres de fonctionner ?

Merci par avance pour votre aide qui m'a déjà été très utile.

Bonne journée