Plusieur console pour la commande PING

Résolu
Bonjour,

Je doit pinger ma salle de cour, il y a 24 PC, mais il faut que je ping tout les PC en même temps, j'ai réussi a le faire sur un seul PC mais je sait que quand on lance plusieur ping a la suite il lancer les ping les un a la suite des autres. J'aimerais les lancer tous en même temps.

voila mon test :

void FGestionInternet::OnrafraichireClick(wxCommandEvent& event)
{
// for(int i=100;i<113;i++)
// {
int ping=system("ping 192.168.0.104");
// }

}

8 réponses

  1. Contributeur
    essai
    void FGestionInternet::OnrafraichireClick(wxCommandEvent& event)
    {
    // for(int i=100;i<113;i++)
    // {
    int ping=system("ping 192.168.0.104&");
    // }
    
    } 
    0
    1. Il faudrait que le dernier octet soit remplacer par mon "i" du for.

      Mais ton astuce ne les lance pas tous en même temps elle les lance tjrs les une après les autres.

      merci comme même
      0
      1. Contributeur
        tu es sous windows ? en effet, c'est un peu plus compliqué alors.
        0
      2. oui je suis sous windows. la loose
        0
    2. re-up le sujet tjrs bloquer
      0
      1. je re up le sujet avec mon code.

        int a=0;void *ping=0;
        void* tache(void*);
        wxString addr_ping = "192.168.0.";
        void FGestionInternet::OnrafraichireClick(wxCommandEvent& event)
        {
            pthread_t thread[a];
            for(int i=0;i<13;i++)
            {
                a=100;
                addr_ping += a;
                pthread_create(&thread[a],NULL,tache,NULL);
                a++;
                testping->SetLabel(addr_ping);
            }
        
        }
        void* tache(void*)
        {
            system("ping 192.168.0.104");
            return ping;
        }


        Voila le dernier octet du ping j'aimerais le changer merci!!
        0
        1. Contributeur
          addr_ping += a;
          peut tu vraiment ajouter un entier à un wxString ??? Pas en C en tout cas, éventuellement en C++.
          0
        2. je suis en c++, wxWidget impose c beaucoup mieux
          0
      2. Contributeur
        Salut.
        C'est pas con les thread.si ça fonctionne.
        int a=0;void *ping=0;
        void* tache(void*);
        wxString addr_ping = "192.168.0.";
        void FGestionInternet::OnrafraichireClick(wxCommandEvent& event)
        {
            pthread_t thread[13];
            a=100;
            for(int i=0;i<13;i++)
            {
                pthread_create(&thread[i],NULL,tache,(void*)&a);
                a++;
                testping->SetLabel(addr_ping);
            }
        
        }
        void* tache(void* fin)
        {
            int n=*((int*)fin);
            char c[4];
            sprintf(c,"%d",n);
            char cmd[31];
            strcpy(cmd,addr_ping);
            strcat(cmd,c);
            system(c);
            return ping;// ???
        }
        ping de 192.168.0.100 à 192.168.0.112
        Il me semble que par défaut les thread sont crées en attente, et qu'il faut modifier les attributs pour les avoir en détacher.
        0
        1. Il ne prend pas en compte la concaténation. il laisse le dernier octet vide. je me tape la tête contre le clavier.
          0
          1. Contributeur
            Si tu fais du C++, tu n'est pas obliger de passer par strcpy strcat etc. fait avec des objets, c'est plus facile. Je ne connais pas wx donc je ne peut pas t'aider.
            Sinon, je ne comprend pas exactement ton problème de concaténation.
            0
        2. probleme resolue:

          int a[12],b;void *ping=0;
          void* tache(void*);
          wxString addr_ping = "192.168.0.";
          void FGestionInternet::OnrafraichireClick(wxCommandEvent& event)
          {
          pthread_t thread[13];
          b=101;
          for(int i=0;i<13;i++)
          {
          a[i]=b;
          char d[4]="";
          sprintf(d,"%d",b);
          wxMessageBox(d);
          b++;
          }

          for(int i=0;i<13;i++)
          {
          pthread_create(&thread[i],NULL,tache,(void*)&a[i]);

          }
          testping->SetLabel(addr_ping);
          }
          void* tache(void* fin)
          {
          int n=*((int*)fin);
          char c[4]="";
          sprintf(c,"%d",n);
          wxMessageBox(_T("Valeur de C : "), wxT(c));
          char cmd[36];
          strcpy(cmd,addr_ping);
          strcat(cmd,c);
          wxMessageBox(cmd);
          system(c);
          0
          1. Contributeur
            C'est pas plutôt system(cmd) qu'il faut mettre ? Erreur de ma part.
            Pourquoi dimensionnes tu a à 12 et non à 13 ? Tu as un risque d'erreur.
            0
        3. Je dimensionnes a 13 comme il s'arrête a 12 je vais pas jusqu'à qu'il soit égale a 13.

          Et oui c'est bien system(cmd) j'ai corriger.

          Pour les suivant qu'il se poseront la question j'ai réussi a pinger les 24 PC avec le code suivant :

          int a[12],c[12],b,b2,x,w;
          int ping1[12];
          int ping2[12];
          void* tache(void*);
          void* tache2(void*);
          wxString addr_ping = "ping 192.168.0.";
          int pc_s1[13],pc_s2[13];
          
          void FGestionInternet::OnrafraichireClick(wxCommandEvent& event)
          {
              pthread_t thread[13];                 
              b=101;                                        //Initialisation des dernier octet du ping
              b2=201;
              for(int i=0;i<13;i++)
              {
                  a[i]=b;                                     // rempli le tableau des dernier octet des ping salle 1
                  c[i]=b2;                                    // rempli le tableau des dernier octet des ping salle2
                  b++;
                  b2++;
              }
          
              for(int i=0;i<13;i++)
              {
                  pthread_create(&thread[i],NULL,tache2,(void*)&c[i]);
                                                                    //création du premier thread pour la salle2
              }
              for(int i=0;i<13;i++)
              {
                  pthread_create(&thread[i],NULL,tache,(void*)&a[i]);
                                                                    //création du premier thread pour la salle1
          
              }
              
              for(int i=0;i<30;i++)
              {
                  pc_s1[i]=ping1[i];                         //je vai essayer de récupérer les valeur du ping 
                  pc_s2[i]=ping2[i];
                  
                
              }
          }
          void* tache2(void* fin2)
          {
              int n2=*((int*)fin2);
              char c2[4]="";
              sprintf(c2,"%d",n2);
             // wxMessageBox(_T("Valeur de C : "), wxT(c));
              char cmd2[36];
              strcpy(cmd2,addr_ping);
              strcat(cmd2,c2);
              //wxMessageBox(cmd2);
              n2=n2-100;
              //wxMessageBox(n2);
              ping2[n2]=system(cmd2);
              return 0;
          }
          void* tache(void* fin)
          {
              int n=*((int*)fin);
              char c[4]="";
              sprintf(c,"%d",n);
             // wxMessageBox(_T("Valeur de C : "), wxT(c));
              char cmd[36];
              strcpy(cmd,addr_ping);
              strcat(cmd,c);
             // wxMessageBox(cmd);
              n=n-100;
             // wxMessageBox(n);
              ping1[n]=system(cmd);
              return 0;
          
          
              //system("ping 192.168.0.104");
              //return ping;
          }
          0
          1. Contributeur
            Houlà, si tu te récupère une erreur de segmentation tu ne viendras pas pleurer !
            et je maintiens, tu fait a[12], tu devrais faire int a[13].
            Ensuite, tu crée une fonction tache2 qui n'est pas très utile, de toute façon regarde ce que retourne la fonction "system()", mais à mon avis pas ce que tu veux.
            Si ta dernière boucle (le dernier for à 30) ne te génère pas d'erreur, tu auras vraiment beaucoup de chance.
            0
          2. la dernier boucle c'est un test elle a gicler la.
            0