lundi 17 décembre 2012

Envoyer et recevoir des données en Udp.

Nous allons voir dans l'exemple suivant la mise en œuvre d'une communication réseau en UDP entre deux scripts PowerShell. Pour cela nous lancer 2 PowerShell_ISE distinct afin de pouvoir exécuter les deux scripts en même temps.

Dans le premier PowerShell_ISE, exécutez le script de réception de données. Celui-ci s'exécutera tant qu'il n'a pas reçu de données.

 
### Réception des données venant du réseau. ###
#Port de communication.
$port2 = 12345

#Initialisation.
$texte2 = ""

#Création d'un objet EndPoint.
$endpoint2 = new-object System.Net.IPEndPoint ([IPAddress]::Any,$port2)

#Création d'un objet Socket UDP.
$socudp2 = new-Object System.Net.Sockets.UdpClient $port2

#Attent l'arrivée des données.
$encode2 = $socudp2.Receive([ref]$endpoint2)

#Converti les données reçues, et les affiches.
$texte2  = [Text.Encoding]::ASCII.GetString($encode2)
write-host $texte2

#Fermeture.
$socudp2.Close()

#Fin.

Exécutez ce premier script. Il va se mettre en attente des données. Dans le second PowerShell_ISE, exécutez le script d'envoi de données ci-dessous.

 
### Emission des données sur le réseau. ###
#Port de communication.
$port1 = 12345

#Ip du destinataire.
$pc1 = "127.0.0.1"    #Nom ou Ip du pc destinataire.
$ippc1 = [System.Net.Dns]::GetHostAddresses($pc1)

#Texte à envoyer.
$texte1 = "Ce message est envoyé depuis le script d'émission."

#Création d'un objet EndPoint.
$endpoint1 = new-object System.Net.IPEndPoint ([IPAddress]$ippc1[0],$port1)

#Création d'un objet Socket UDP.
$socudp1 = new-Object System.Net.Sockets.UdpClient

#Préparation du text à l'envoi.
$encode1 = [Text.Encoding]::ASCII.GetBytes($texte1)

#Envoie du message.
$envoie1 = $socudp1.Send($encode1,$encode1.length,$endpoint1)

#Fermeture.
$socudp1.Close()

#Fin.

Lorsque vous exécutez le script d'envoi de données, le script de réception affiche le message "Ce message est envoyé depuis script d'émission." et se ferme.

Maintenant vous pouvez refaire le test avec deux postes de travail distants. Par contre, dans le script d'émission, n'oubliez pas de changer la valeur de $pc1 = "127.0.0.1" par le nom ou l'ip du poste de destination.