Lancer plusieurs serveurs

Fermé
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 - Modifié par crapoulou le 18/01/2015 à 18:27
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 20 janv. 2015 à 07:10
Bonjour,
pour un projet, je dois assurer une connexion via un protocole TCP entre plusieurs threads. Alors j'ai trois classes serveurs, trois classes clients, et une classe avec une méthode main() qui est censée tout lancer.

Alors j'ai écris ça :

public static void main(String[] args)
{
Serveur1 s1 = new Serveur1();
Serveur2 s2 = new Serveur2();
Serveur3 s3 = new Serveur3();

Client1 c1 = new Client1();
Client2 c2 = new Client2();
Client3 c3 = new Client3();
}


Et s'il y a des méthodes main() dans les classes serveur et client, le fait de d'instancier trois serveurs et trois clients ne devrait pas permettre de lancer la méthode main() ?

Sinon, en écrivant s1.main(args), cela permet de lancer la méthode main() du Serveur1, mais les lignes en dessous ne seront alors pas lues, et je ne pourrais pas lancer les autres serveurs et les autres clients...

J'espère avoir assez bien expliqué le problème ! Pourriez-vous m'aider ?
Merci d'avance !

3 réponses

KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
18 janv. 2015 à 18:52
Bonjour,

Tu peux faire des threads pour lancer les clients en parallèle.

Par contre je ne vois pas l'intérêt de lancer plusieurs serveurs en parallèle.
0
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 6
18 janv. 2015 à 21:32
Merci pour ta réponse !
et bien je dois lancer des serveurs différents parce qu'ils ont chacun leur calcul à effectuer et ne renvoient pas la même chose.
Et par contre, utiliser des threads pour lancer les clients en parallèle, comment écris-tu ça en java exactement ?
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
18 janv. 2015 à 21:39
La façon simple c'est de faire :

new Thread() {
    public void run() {
        new Client();
    }
}.start();
0
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 6
19 janv. 2015 à 12:34
J'ai essayé ton code mais ça ne fonctionne pas... J'ai mis ce bout de code dans ma méthode main(), et j'ai aussi mis un System.out.println("Test"); pour être sûr que je rentre dans la méthode run() et c'est bien le cas !
Mais dans ma classe Client, j'ai une méthode main(), et le simple fait de déclarer un ovjet de type Client comme ton code le fait devrait permettre de lancer la méthode main() de cette classe Client non ?
Parce que moi ce n'est pas le cas. La méthode main() de la classe Client n'est pas lancée...
Vois-tu pourquoi ?
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
19 janv. 2015 à 14:13
Le main est une méthode static, en aucun cas créer un objet Client ne va lancer la méthode main.

Essayes :

public void run() {
    Client.main(null);
}
0
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 6
Modifié par KX le 23/01/2015 à 19:37
Merci ça marche bien mais pour les serveurs seulement. Parce qu'en fait j'aimerais que les clients executent leur code en même temps. Et j'ai utilisé ton bout de code pour faire ça :
new Thread() {
       public void run() {
        
        for(int i=0;i<3;i++)
     {
         
         Clients[i] = new Client(i);
           
           String[] args2 = new String[2];
     args2[0] = "Toulouse";
     args2[1] = "Nantes";
     try {
      Clients[i].main(args2);
     } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
           
       }
       }
   }.start();


Et alors les Clients sont créés, leur méthode s'exécutent, mais les uns après les autres, alors que je voudrais que leur méthodes respectives s'exécutent en même temps.
As-tu une idée pour faire ça ?
Merci d'avance !
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
20 janv. 2015 à 07:10
S'exécuter en même temps, c'est ce que font les Thread. Si tu créés 3 threads clients en parallèle, ça fera 3 actions en parallèle.

Remarque : comme je l'ai dit, main est une méthode static, ça ne sert à rien de créer des objets Client pour lancer son main !

public class Test {
    public static void main(String[] args) {
        for (int i=0; i<3; i++) {
            new Thread() {
                public void run() {
                    try {
                        String[] args2 = {"Toulouse","Nantes"};
                        Client.main(args2);
                    catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }.start();
        }
    }
}
0