Après avoir créé le socket, il va falloir envoyer un premier datagramme au serveur via la fonction sendto qui nécessite 6 paramètres :
Il va donc falloir déclarer une variante de la structure sockaddr correspondant à AF_INET. Il s'agit du type struct sockaddr_in. On commencera par mettre à zéro le contenu de cette structure via la fonction bzero de string.h, puis on affectera, au premier champ, nommé ici sin_family, la valeur AF_INET.
struct sockaddr_in addr; bzero(&addr, sizeof(addr)); addr.sin_family = AF_INET;
Il faut ensuite remplir, dans la structure, le champ sin_addr avec l'adresse IPv4 du serveur à contacter et le champ sin_port avec le numéro de son port UDP.
inet_aton("127.0.0.1", &addr.sin_addr); addr.sin_port = htons(7);
Ayant ainsi précisé l'adresse 127.0.0.1 et le port 7, il ne reste plus qu'à appeler la fonction sendto pour que le client cherche à établir la connexion avec le serveur echo local.
sendto(fd, &buffer, sizeof(buffer), MSG_CONFIRM, (struct sockaddr *) &addr, sizeof(addr));
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <netdb.h> #include <sys/socket.h> #include <string.h> // pour les fonctions bzero et strlen #include <arpa/inet.h> // pour la fonction inet_addr int main() { int fd; struct sockaddr_in addr; int err; char buffer[]="Hello !"; fd = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (fd<0) { printf("Erreur de creation de la socket !\n"); exit(1); } bzero(&addr, sizeof(addr)); addr.sin_family = AF_INET; err = inet_aton("127.0.0.1", &addr.sin_addr); if (err == 0) { printf("Adresse IPv4 invalide !\n"); exit(1); } addr.sin_port = htons(8080); sendto(fd, &buffer, strlen(buffer), MSG_CONFIRM, (struct sockaddr *) &addr, sizeof(addr)); printf("Message envoyé au serveur !\n"); return 0; }
Dans les langages comme PHP ou Python, il existe des bibliothèques faisant l'interface avec les fonctions systèmes.
Le code de l'exemple écrit en C devient en PHP :
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket == false) die("Erreur de création de la socket !\n"); $buffer = "Hello !"; $len = strlen($buffer); socket_sendto($socket, $buffer, $len, '127.0.0.1', 8080); echo "Message envoyé au serveur !\n";
Le code de l'exemple écrit en C devient en Python :
try : sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.sendto("Hello !",('127.0.0.1',8080)) except socket.error : print("Erreur de communication du client !") exit() print("Message envoyé au serveur !")