Ce petit tutorial va vous expliquer comment envoyer et reçevoir des données à travers un réseau par le bié du protocol UDP.
1. Préparation de la Socket d'écoute
Il s'agit du côté "serveur" si on puis le dire ainsi. Il faut rapeller que le protocol UDP s'utilise en mode non connecté, c'est-à-dire que le client envoi des données sans s'assurer de la présence d'un serveur pour les reçevoir.
Voici un exemple de méthode permettant de réaliser une Socket en écoute de datagrammes:
private
void ReceiveThread() {
Socket s =
new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.Bind(
new IPEndPoint(IPAddress.Any, 11000)); // On doit lier la Socket à un port d'écoute sur la machine. On choisit également de se mettre en écoute sur toutes les interfaces réseaux présentes (IPAddress.Any).
EndPoint ep =
new IPEndPoint(IPAddress.Any, 0); // Ce point de terminaison représentera les informations sur l'ordinateur émettant les datagrammes.
byte[] buffer = new byte[1024];
int ret = s.ReceiveFrom(buffer, ref ep); // On passe le EndPoint par référence, car celui-ci sera ré-instancié avec les informations de l'envoyeur.
s.Close(); // On met fin à l'écoute de la Socket.
MessageBox.Show(ep.ToString() +
": " + System.Text.Encoding.ASCII.GetString(buffer, 0, ret));
}
2. Envoi du datagramme sur le réseau
Pour envoyer les données (datagrammes) sur le réseau, nous créons exactement la même Socket que celle utilisée pour l'écoute. Celle-ci ne sera pas "bindée" à un port local contrairement à la précédante.
La méthode suivante présente la procédure d'envoi:
private
void SendThread() {
Socket s =
new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
string message = "Salut les gurus !!";
EndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11000); // Point de terminaison pour définir la destination des datagrammes à envoyer.
s.SendTo(System.Text.Encoding.ASCII.GetBytes(message), ep);
s.Close();
}
Voilà, c'était pas bien compliqué, mais cela peut s'avérer plus pratique que le TCP lorsque les données envoyées ne sont pas soumises à un ordonnancement particulier. Pour rappel, si deux packets p1 et p2 sont envoyés successivement par le protocol UDP, il n'est pas garanti qu'ils arrivent dans le même ordre.
Source: http://blogs.labo-dotnet.com/gg00xiv/resources/TestUDP.zip
Bonne prog !