exécuter plusieurs programmes en même temps

panorama12
Messages postés
39
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
21 juin 2006
- 22 avril 2006 à 16:45
OneHacker
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
- 23 avril 2006 à 10:36
Bonjour.
Je cherche à faire des communications ftp ou http avec 2 serveurs en même temps en utilisant VB.Je m'explique...
Je voudrais à partir d'un programme vb pouvoir lancer par exemple la copie d'un fichier de mon pc sur 2 serveurs en même temps(à l'aide d'un switch).Je ne vois pas du tout comment faire,vu que normalement dans un code, les lignes s'exécutent les unes après les autres.Si j'utilise par exemple Winsock,je suis obligé d'attendre que le transfert se fasse sur le 1er serveur avant de passer au 2ème.
Si quelqu'un peut m'apporter son aide précieuse..je le remercie d'avance.

8 réponses

cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
22 avril 2006 à 17:39
Duplique ton code, c'est à dire utilise un second winsock en parallèle, chacun conecté sur son serveur.

Methode que j'utilise depuis maintenant 2 ans sur un programme pour communiquer avec un serveur sur 3 ports en parallèle et en synchronisme.

0
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
22 avril 2006 à 17:41
1 winsock par serveur, avec un port de sortie différent sur chaque winsock, sinon le second winsock ne marchera pas, le port étant occupé par le premier.

Moi peutetre pas trés clair dans mes explications, dsl

0
panorama12
Messages postés
39
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
21 juin 2006

22 avril 2006 à 21:08
Bonjour.
Je te remercie de m'avoir répondu,mais je ne cois pas concrètement comment je pourrai faire.Imaginons par ex que je duplique le code sur 2 forms,une pour chaque serveur...je ne vois pas comment faire pour pouvoir lancer les 2 procédures simultanément...
Est-ce ça quelque chose à voir avec le mutithreading?
0
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
22 avril 2006 à 21:25
Pourquoi 2 forms ?

Tu peux mettre tes 2 controles sur la même form et tu les gères comme si tu gérais 2 timers ou 2 boutons ou 2 ....
Tu as 2 procédures totalement indépendantes

Quand je disais "dupliquer le code" je voulais simplement dire que le code que tu avais écrit pour un controle, il te faut réécrire un code identique pour le second controle.

Ca marche sans souci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
panorama12
Messages postés
39
Date d'inscription
mardi 7 mars 2006
Statut
Membre
Dernière intervention
21 juin 2006

22 avril 2006 à 21:47
j'avoue que je ne comprend tjrs pas.
Si j'ai deux procédures Serveur1 et Serveur2 sur la même form, je ne vois pas comment faire pour lancer les deux applications en même tps,puis que vb exécute le programme séquentiellement,ligne après ligne..
donc il éxécutera d'abord Serveur1,puis quand il aura fini,il passera à Serveur2.A moins que je n'ai rien compris.
0
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
22 avril 2006 à 22:43
Ok une chose que j'avais zappé c'est que tu vas utilisé ton controle en client. Moi effectivement je l'utilisais en serveur, donc sur un évènement, c'est pour cela que j'avais mes 2 procédures qui pouvaient tourner en parallèle, elle étaient lancées par leur évènement respectif.

En client c'est effectivement toi qui va lancer les communications, donc séquenciellement comme tu dis. Tu es obilger de faire l'un après l'autre. Là où peut-etre tu peux t'en sortir c'est au niveau des methodes du controle, il me semble qu'elles ne sont pas bloquantes, et notamment la méthode SendData. Lorsqu'elle te rend la main, toutes les données n'ont pas forcément été encore envoyées. C'est à dire que pendant que des données partent sur un port, toi tu peux déjà commencer l'envoie sur l'autre port.

Tu peux aussi essayer de faire une bidouille en mettant tes procédures chacune dans un timer. Chaque timer étant sencé tourner en parallèle. Personellement, si j'ai le choix, j'ai tendance à éviter ce genre de solution.

Sinon il te reste le multithreading, à oublier en VB, il sait pas faire. Faut obligatoirement passer en C, donc abandonné le controle Winsock, et passer par les APIs windows. Si tu te sent d'attaque, tu peux essayer de voir si ça passe dans une DLL appelée depuis VB.

0
MrdJack
Messages postés
146
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
8 mars 2008
2
23 avril 2006 à 00:23
en remarque sur le dernier post, vb gere le multi threading, mais c'est pas forcement le meilleur moyen.

d'autre part, en placant un control winsock sur ta form, lorsque tu
envoie des données, ca envoie par paquets. et à chaque envoie de paquet
réussi, il y a en tcp une confirmation du serveur pour signaler au
client que les données ont été recues et que le serveur est en attente
de la suite des données.

le controle winsock gere cela sous la forme d'evenement. mais qu'est-ce
qu'un evenement ? hé bien c'est une sorte de thread qui va se
déclancher à la réception de l'evenement en question. en se basant sur
ce principe, et sur le systeme des msgbox qui bloquent le processus
tant que l'on ne sort pas de la msgbox, (exemple), si l'on place une
msgbox dans la fonction de reception des données, que plusieures msgbox
apparraissent (faites l'expérience) ce qui interromp pour chaque msgbox
le thread qui lui est associé et non pas le thread principal de
l'application.



à partir de là, la déduction est simple : 1 evenement = 1 thread créé(
un thread de la fonction evenementielle. ex : on_connect ou
on_data_arrival etc...)



personnellement, j'utilise un controle winsock à chaque fois que j'ai
besoin d'utiliser des threads car ca gere super bien et sasn api. en
gros, je fais un select dans on_data_arrival pour séparer toutes les
fonctions threads et j'appel senddata en donnant le nom du thread à
lancer, et ses arguments... mais chacun ses trucs !!!

en tout cas, essayez l'histoire des msgbox et vous serez surpris... ca va vous donner des idées !!!



@+
0
OneHacker
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
2
23 avril 2006 à 10:36
C'est impossible de le faire en même temps.

Redman
0