#include #include // pour strlen() #include // pour exit() #include #include #include #include #include //Fonction permettant d'envoyer un message en broadcast void sendUDPBroadcast(unsigned char *message, int taille_message, int port) { int broadcast_enable = 1; //Option broadcast ON int s = socket(AF_INET, SOCK_DGRAM, 0); //Création de la socket : s = file descriptor de la socket, AF_INET (socket internet), SOCK_DGRAM (datagramme, UDP, sans connexion) if(s < 0){ //Test de la valeur de retour de la socket perror("sendUDPBroadcast.socket"); exit(-1); } if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &broadcast_enable, sizeof(broadcast_enable)) < 0) { //Mise option broadcast à la socket perror("sendUDPBroadcast.setsockopt"); exit(-1); } struct sockaddr_in broadcast_address; memset(&broadcast_address, 0, sizeof(broadcast_address)); broadcast_address.sin_family = AF_INET; broadcast_address.sin_port = htons(port); broadcast_address.sin_addr.s_addr = INADDR_BROADCAST; //255.255.255.255 //Envoie du message grâce à la socket if(sendto(s, message, taille_message, 0, (struct sockaddr *) &broadcast_address, sizeof(broadcast_address)) < 0 ) { perror("sendUDPBroadcast.sendto"); exit(-1); } } //Fonction permettant d'envoyer un message à une adresse void sendUDPUnicast(char *address, unsigned char *message, int taille_message, int port) { int s = socket(AF_INET, SOCK_DGRAM, 0); //Création de la socket : s = file descriptor de la socket, AF_INET (socket internet), SOCK_DGRAM (datagramme, UDP, sans connexion) if(s < 0){ //Test de la valeur de retour de la socket perror("sendUDPUnicast.socket"); exit(-1); } struct sockaddr_in unicast_address; //Creation structure adresse de destination memset(&unicast_address, 0, sizeof(unicast_address)); //Mise à zéro de la structure d'adresse unicast_address.sin_family = AF_INET; unicast_address.sin_port = htons(port); //Mise du port en ordre du réseau (big endian) unicast_address.sin_addr.s_addr = inet_addr(address); if(sendto(s, message, taille_message, 0, (struct sockaddr *) &unicast_address, sizeof(unicast_address)) < 0 ) { perror("sendUDPUnicast.sendto"); exit(-1); } } int main(void){ unsigned char message_broadcast[100] = "J'envoie en UDP boradcast"; unsigned char message_unicast[100] = "J'envoie en UDP unicast"; // send broadcast sendUDPBroadcast(message_broadcast, strlen(message_broadcast), 2030); // send unicast char adresse[50] = "127.0.0.1"; sendUDPUnicast(adresse, message_unicast, strlen(message_unicast), 2030); return 0; }