Page 1 sur 1

[..] Envoi/Réception d'un message sur un réseau

Posté : jeu. 16 févr. 2012 19:58
par rougipa
Bonjour,

J'ai connecté deux PC (un Windows XP et un Windows Seven) avec un cable croisé pour établir un réseau.

J'aimerais savoir comment envoyer un message du premier au second ordinateur en AutoIt et que le second ordinateur sache l'interpréter.

Par exemple, comment envoyer de PC1 à PC2 le message "Hello World" et que le second PC, une fois le message reçu affiche une message box contenant "Hello World" ?

Je suis assez débutant en AutoIt, et je ne me suis encore jamais interessé à ce qui touche à un réseau.

Si vous pourriez ne serait-ce que m'indiquer le nom de fonctions qui pourraient m'aider (afin que je comprenne leur fonctionnement dans l'aide de Scite), je vous en serais reconnaissant :)

Merci !

Re: [..] Envoi/Réception d'un message sur un réseau

Posté : jeu. 16 févr. 2012 21:31
par TT22
Salut, j'avais déjà fais ça pour un autre membre du forum (il faut faire plus de recherches) :
Il y a un receveur et un expéditeur, le receveur est lancé en permanence (il recherche si un message a été reçu) et l'expéditeur est à lancer seulement quand vous voulez envoyer un message.
Il fonctionne simplement en créant un fichier dans les documents partagé :wink:

receveur :
► Afficher le texte
expéditeur
► Afficher le texte

Re: [..] Envoi/Réception d'un message sur un réseau

Posté : ven. 17 févr. 2012 00:24
par DimVar
[Reflexe systeme ON]
CHMODer le dossier de partage ;)
[Reflexe systeme OFF]

Re: [..] Envoi/Réception d'un message sur un réseau

Posté : ven. 17 févr. 2012 10:20
par ZDS
Bonjour,

Passer par des fichiers temporaires pour faire discuter deux ordis me semble être un peu... Bref, autre solution que je trouve plus logique, l'envoi de messages par TCP Send/Recv. Voici les fonctions en question :
- TCPStartup pour lancer le système de communication
- TCPShutdown pour l'éteindre
- TCPListen pour créer une "boîte de reception", un tunnel de communication appelé socket
- TCPAccept pour ouvrir la connexion (entrante) sur la socket (en gros, accepte les receptions)
- TCPConnect pour établir une connexion (sortante) sur une socket (en gros, accepte les envois)
- TCPRecv pour écouter les messages présent dans la socket
- TCPSend pour envoyer des messages sur une socket

Je te prépare un exemple d'ici qq minutes.

A bientôt.

PS: TT22 et DimVar, votre solution ressemble un peu à deux gars qui discutent en face l'un de l'autre, mais au lieu de parler, ils s’envoient des post-its... Aberrant, non? ^^

Re: [..] Envoi/Réception d'un message sur un réseau

Posté : ven. 17 févr. 2012 10:41
par DimVar
Désolé, je ne vois rien d'aberrant là-dedans.
C'est certes, simpliste et basique, mais compréhensible.
Il s'agit d'un utilisateur qui débute en Autoit et en réseau. (voir son post)
Je ne pense donc pas qu'il faille le noyer dans des notions TCP dés le début (au risque de passer 2 jours à lui expliquer les fondamentaux), mais le laisser découvrir les limites de ce script et lui donner envie d'aller plus loin si besoin.
Ce n'est que mon humble avis. Image

Re: [..] Envoi/Réception d'un message sur un réseau

Posté : ven. 17 févr. 2012 11:45
par ZDS
Sans être non plus un puriste, je suis en train de créer 2 fonctions : une qui s'appelle sendMsg() pour envoyer un message, l'autre recvMsg pour recevoir un message. Deux fonctions qui auront un code certes un petit peu complexe (même si je considère que ça ne l'est pas, même pour un débutant, car des commentaires suffisent à comprendre comment ça fonctionne), mais qui auront une utilisation très simple.

TCP n'a de compliqué que la théorie. Sans aller dans les détails, c'est quand même simple :
- Celui qui veut recevoir un message, ouvre un tunnel, et regarde ce qui apparaît dedans.
- Celui qui veut envoyer un message, se branche sur le tunnel, et y envoye son blabla.
- Voila.

Scruter un dossier partagé est très lourd et compliqué en comparaison. M'enfin, idem que pour ton choix que je respecte, ce n'est que mon avis personnel.

Sinon, voici un petit fichier, pas encore testé (je le fais dans l'heure de midi, depuis le boulot j'ai rien de fonctionnel). Les trois quarts sont des commentaires pour faire comprendre le code; Le PC d'envoi utilise la fonction sendMsg, le PC de destination utilise la fonction recvMsg (les fonctions avec un _ devant sont là pour aérer et éviter d'avoir des pavés de 4 km de long ^^).
► Afficher le texteEnvoi-Réception.au3
Dans l'absolu, il suffira de mettre #include "Envoi-Réception.au3" dans ton code pour pouvoir faire appel à sendMsg("PC_DESTINATION", "Hello World !", 15000) ; le 15000 correspond à 15 secondes, si le temps est écoulé il stoppe (évitons d'avoir un script qui ne s'arrete plus ^^). Et de faire appel de l'autre coté à recvMsg(15000) ; idem pour le 15000

Je te prépare ça en début d'aprèm après mangé et testé ^^

EDIT: No problem Dimvar. Ce que j'entends par lourd, c'est faire un FileExists en permanence sur un fichier en partage réseau; utiliser le protocole samba pour récupérer les infos d'un dossier partagé, dont 99% d'informations qui ne nous intéressent pas, comme le nom du fichier, sa description, la liste des droits d'utilisateurs, sa date de modification... alors que son contenu de quelques mots reste la donnée que l'on souhaite. Tu déployes et tu mobilises des ressources de façon inutile, que ce soit
- en espace disque (là où la donnée représente une fraction de la taille que prend un fichier)
- ou en réseau (Samba est un protocole sur un modèle client serveur, dans la couche Présentation, qui s'appuye sur ... TCP/IP ! Bah dis donc, deux couches de travail (Présentation et Session) en trop ^^).
- ou en ram/cpu/célensamèrlipopette (fais le test) : Bah oui, mobiliser au moins 3 ports (le 139 et je sais plus les autres), faire tourner un serveur SMB pour traiter les demandes, regénérer la liste des fichiers disponibles à chaque demande (sauf peut-être depuis la version 2, mais sous XP et avant c'est pas génial), etc... ALORS QUE le système que je propose utilise un port et c'est tout... :)

Je ne dis pas que votre système ne marche pas, je dis seulement que c'est complètement inadapté au besoin en question. C'est comme de discuter avec ton voisin de bureau en passant par un système de chat ou par un forum informatique, c'est quand même plus simple de remuer les lèvres (scène excellente de la série Dead Like Me). Sinon, si tu veux pousser la chose au paroxysme, tu as aussi le protocole IPoAC de la RFC 1149. Ca a beau être un poisson d'avril, ça n'en démontre pas moins l'absurdité de certains moyens pour effectuer des tâches simples comme un ping.

Re: [..] Envoi/Réception d'un message sur un réseau

Posté : ven. 17 févr. 2012 11:49
par DimVar
ZDS a écrit :...Scruter un dossier partagé est très lourd et compliqué en comparaison...
Peux tu développer stp ? (pour ma culture personnelle)

Re: [..] Envoi/Réception d'un message sur un réseau

Posté : ven. 17 févr. 2012 12:14
par matwachich
Sinon, il y a aussi ça, je sais que ça fonctionne en réseau, mais je ne l'ai jamais fait.
Je me pencherai sur leurs (MailSlots) utilisation en réseau dès que j'aurai le temps.

Re: [..] Envoi/Réception d'un message sur un réseau

Posté : ven. 17 févr. 2012 16:09
par ZDS
Voila, je pense que tu vas apprécier la simplicité du bidule ^^

Voici le code du celui qui envoie :

Code : Tout sélectionner

#Include "Envoi-Réception.au3"
Local $resultat = sendMsg("[color=#BF0000][b]DESTINATAIRE[/b][/color]", "Hello World !")
MsgBox(0, "ENVOI", "Error code : " & @error)
Et maintenant, voici le code de celui qui reçoit :

Code : Tout sélectionner

#Include "Envoi-Réception.au3"
Local $resultat = recvMsg()
MsgBox(0, "RECEPTION", "Error code : " & @error & @CRLF & "'"&$resultat&"'")
Comme quoi, c'est simplissime dans l'utilisation :) Juste à ajouter le script suivant "Envoi-Réception.au3" dans le même répertoire que chaque script (sur les deux pcs).
► Afficher le texteEnvoi-Réception.au3
Contrairement aux scripts de l'aide fournie avec AutoIt, il n'y a pas forcément besoin de lancer le destinataire (serveur) avant l'expéditeur (client).

Tiens moi au courant, à bientôt !

EDIT : Méa Culpa, j'avais oublié un morceau pour fermer proprement la connexion après avoir envoyé le message. Je fais la gu**le quand les gens font du code pas beau ou quand ce n'est pas un minimum fonctionnel, je ferai bien de suivre mes propres conseils ^^
PJ: Archive ZIP comprenant les différents fichiers présentés ici
Envoi-Réception.zip
(1.96 Kio) Téléchargé 65 fois

Re: [..] Envoi/Réception d'un message sur un réseau

Posté : ven. 17 févr. 2012 16:58
par jchd
Oui Mat, MailSlots !

Re: [..] Envoi/Réception d'un message sur un réseau

Posté : ven. 17 févr. 2012 18:29
par TT22
ZDS a écrit :Passer par des fichiers temporaires pour faire discuter deux ordis me semble être un peu...
Peut-être, mais 1 : C'est un script que j'avais fait il y a déjà quelques temps, 2 : quoi qu'on en dise, cette méthode fonctionne :P , 3 : Comme l'as dit DimVar : "Je ne pense donc pas qu'il faille le noyer dans des notions TCP dés le début"
ZDS a écrit :deux gars qui discutent en face l'un de l'autre, mais au lieu de parler, ils s’envoient des post-its...
:lol: J'adore cette comparaison !!!