[..] TCP host/guest

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Vincent31
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 13 nov. 2011 12:56
Status : Hors ligne

[..] TCP host/guest

#1

Message par Vincent31 »

Bonjour,

Je souhaiterais faire communiquer la machine hôte et virtuelle par le biais des fonctions TCP
hôte<-> privé en réseau privé sous virtualbox

Vincent
Modifié en dernier par Vincent31 le jeu. 01 mars 2012 20:17, modifié 2 fois.
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [...] script pour communiquer entre host et guest

#2

Message par ZDS »

Bonjour,

Dans le but de t'aider plus facilement, ça serait plus simple d'avoir le script de départ. Est ce que le script sur la VM doit communiquer avec la machine hôte ? ou bien juste lui envoyer des infos ? Parce que sinon dans le script que tu as déjà, tu risques d'avoir beaucoup de modifs dans ton code pour des gestions concurrentes de files de messages.

Dans tous les cas , tu trouveras ton bonheur avec les fonctions TCP/UDP Send/Recv. Regarde l'aide de chaque fonction, ça devrait te dépanner.

Avec ton code, je t'apporterai plus d'aide (et aussi surtout parce que ton script me fait beaucoup penser à un bot multi-comptes distribué sur différentes VMs, un concept que j'avais traité il y a des années et qui est totalement interdit par ce forum).

A bientôt !

PS: Quand je dis "communiquer", je parle de communication au sens langage, c'est à dire des envois d'infos dans les deux sens.

EDIT: Ton script peut aussi être tout à fait légal; j'ai tendance à être assez parano, mais si tu n'as rien à cacher, tu comprendras mon point de vue.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Vincent31
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 13 nov. 2011 12:56
Status : Hors ligne

Re: [...] script pour communiquer entre host et guest

#3

Message par Vincent31 »

Alors elle doit communiquer .
Je vais regarder ces fonctions !

Non pas de soucis c'est simplement un programme de simulation du trafic routier (maths spé power :D ) la fluidité variant du vert au rouge.

En fait je souhaites simplement que lorque la simulation est terminé (on sort de la boucle) je puisse avoir marquée "simulation terminée avec succes" ou en cas d'arret forcé "échec de la simulation" sur un GUI de la machine hote
Je souhaites égalemnt pouvoir forcer l'arret d'une simulation depuis ce GUI et en lancer une.
Vincent31
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 13 nov. 2011 12:56
Status : Hors ligne

Re: [..] script pour communiquer entre host et guest

#4

Message par Vincent31 »

mmm je viens de regarder ces fonctions ça me parait un peu trop compliqué pour le temps que je peux y passé.
Soit je me contente du fichier excel soit je trouve un moyen de ce que je voulais faire au début c'est à dire :


ce que je fais aujourd'hui :
la voiture est assimilé à un point de couleur qui avance de tant de pixels toutes les tant millisecondes et en fait mon pixelgetcolor regarde combien de voitures passe par ce point et à quelle différence de temps.

ce que je voualit faire au début mais qui n'a pas fonctionnné et qui m'éviterait le pixelgetcolor et donc la vm:
c'est d'avoir une variable $voitureX mais je n'arrive pas à créer de tels variables c'est à dire qu'à chaque fois qu'une voiture (variable) est générée elle prenne le nom de voiture1 puis voiture2 ...
ce qui me permettrait de soustraire la postion de la voiture2 à la voiture1 etc..
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] script pour communiquer entre host et guest

#5

Message par ZDS »

En fait c'est sans doute plus simple que tu ne le penses (on va appeler serveur le script sur ta machine hote, et client un script sur ta vm) :
Le client peut envoyer / recevoir quels types de messages ? Une fois que tu as ça, tu n'as plus qu'à traiter les messages dans ta boucle principale sur le client, idem sur le script du serveur.

Je te conseille des messages très courts et ciblés : mot-clé de 8 caractères maxi & "#" & paramètres séparés par ";" si besoin, et un dernier # pour une réponse au message.
Genre le serveur envoie "SHUTDOWN#5" pour une extinction du client dans 5 secondes.
le client renvoie alors "SHUTDOWN#5#OK" si il est d'accord, et s'éteint.
Le serveur voit la réponse et affiche un message disant que l'ordre a bien été reçu et bien été traité.

Autre exemple :
Le client envoye "PIXEL#FF0000;3" au serveur pour dire que le feu 3 est passé au rouge.
Le serveur enregistre l'info, et retourne "PIXEL#FF0000;3#KO" au client, car il est occupé à autre chose.
Le client reçoie la réponse et réessaye "PIXEL#FF0000;3" au serveur 5 secondes plus tard.
Le serveur est dispo et renvoye "PIXEL#FF0000;3#OK" et affiche un message à l'écran pour dire que le feu 3 est passé au rouge.
Le client a reçu "PIXEL#FF0000;3#OK" et continue donc son boulot.

Somme toute, le souci, c'est de connecter les différents clients au serveur. une fois que c'est fait, le reste n'est que de la logique distribuée.

Et encore, c'est encore plus simple si tu n'as qu'un seul client à gérer à la fois. Dépose tes scripts, je peux t'aider là dessus sans trop de souci (par contre, je ne pourrai te donner un coup de main que pendant la journée).

A bientôt !

PS: Le truc le plus simple, c'est carrément de faire en sorte qu'à chaque fois qu'on a un message à envoyer, il soit mis dans un array. En parallèle, une fonction traite cette liste et envoye les messages au destinataire. Une autre fonction lit les messages d'arrivée, et dès qu'on a fait un tour de boucle, on regarde les messages en entrée. Ainsi ton programme sera très peu impacté par le système de communication. Ca semble barbare comme ça, mais je t'assure qu'avec un code de base, je peux te faire un truc bien et fonctionnel :)
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Vincent31
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 13 nov. 2011 12:56
Status : Hors ligne

Re: [..] script pour communiquer entre host et guest

#6

Message par Vincent31 »

ZDS t'es un génie ! en plus de m'avoir très bien expliquer le principe tu m'as donné plein d'idées pour étoffer la simulation (en pilotant les feux à notre gré par exemple : jusque là je ne créer qu'un évènement pertubateur aléatoire : accident,vehicule lent ...)

je vais essayé de me familiariser avec cette communication dans un script séparé puis je refairé appel a toi pour m'aider à l'intégrer correctement dans mon script mais seulement une fois que j'aurais modifier le script pour ajouter toutes ces idées que tu m'as donné : ça devient ma priorité !

merci ZDS
Vincent31
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 13 nov. 2011 12:56
Status : Hors ligne

Re: [..] Script pour communiquer entre host et guest

#7

Message par Vincent31 »

ok ma simulation colle bien mieux à la réalité et est très complète maintenant.

Je reprends donc le travail sur le tcp : à partir du dernier message de ZDS de differents topics et de l'aide j'ai vraiment du mal à comprendre comment ça se construit.

Voici le peu que je crois comprendre (il risque d'y avoir pas mal de betises dans ce qui suit

;ipv4 : machine hote 192.168.56.1 , virtuelle 192.168.56.101 ; "reseau" 192.168.56.0

Code : Tout sélectionner

;---------------------------------------
;----------Script hôte-------------------
;---------------------------------------

Local $g_IP = "192.168.56.0"
TCPStartup()

tcplisten
tcpsend
tcprecv...
 

Code : Tout sélectionner

;---------------------------------------
;----------Script guest-------------------
;---------------------------------------

Local $g_IP = "192.168.56.0"
TCPStartup()

Local $socket = TCPConnect($g_IP, ????)
If $socket = -1 Then
                     Msgbox(0,"","0")
EndIf

tcplisten
tcpsend
tcprecv...

 
Vincent31
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 13 nov. 2011 12:56
Status : Hors ligne

Re: [..] TCP host/guest

#8

Message par Vincent31 »

bonsoir, un petit coup de pouce pour l'architecture de mon code ?
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] TCP host/guest

#9

Message par matwachich »

Bon, je vous ai concocté un petit exemple.
La communication ne fonctionne que dans un sens (Client -> Serveur), mais si vous le voulez, je pourrai le faire dans les 2.

Cet exemple est bien commenté
► Afficher le texte
Sinon, pour faire encore plus simple, je vous propose mon UDF Simple TCP, il est documenté (en anglais :? ) mais il est fonctionnel, et une fois maitrisé, vous n'aurez plus à vous casser la tête avec les échanges d'informations en réseau

PS: Les MailSlots fonctionnent en réseau, mais je ne l'ai jamais tester (google: "MailSlot UDF Autoitscript")
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Vincent31
Niveau 3
Niveau 3
Messages : 46
Enregistré le : dim. 13 nov. 2011 12:56
Status : Hors ligne

Re: [..] TCP host/guest

#10

Message par Vincent31 »

sincèrement un grand merci matwachich pour avoir pris le temps de commenté autant le code je comprends bien mieux à présent.

Effectivement je souhaiterais faire serveur <-> client. A quel endroit dois-je adapter le code ?

merci pour l'udf je l'avais deja chargé au cas où mais depuis que j'utilise autoit, j'essai de progresser le plus possible a chaque script !

merci encore
Répondre