SocketUDP *creerSocketUDPattachee(const char *address, int port) { SocketUDP *sock = creerSocketUDP(); struct sockaddr_in in; if (initSockAddrUDP(address, port, &in) == -1) { fprintf(stderr, "socketUDP: creerSocketUDPattachee -> iniSockAddrUDP a retourné -1\n"); return NULL; } if (bind(sock->socket, (struct sockaddr *) &in, sizeof (struct sockaddr_in)) == -1) { fprintf(stderr, "socketUDP: creerSocketUDPattachee -> bind a retourné -1\n"); perror("Message "); fprintf(stderr, "\n"); return NULL; } fillIdUDP(sock); return sock; }
int main(int argc, char* argv[]) { if(argc != 2) { printf("Wrong number of argument\n"); return -1; } // adresse de la socket locale static struct sockaddr_in addr_local; // adresse de la socket coté serveur static struct sockaddr_in addr_client; // identifiant du client struct hostent *host_client; // taille de l'addresse socket socklen_t lg; // descripteur de la socket locale int sock; // Création de la socket et bind via functions.h sock = creerSocketUDP(atoi(argv[1])); if (sock == -1) { printf("f**k\n"); exit(-1); } // chaine à envoyer en réponse char *reponse = "bien recu"; // buffer de réception char buffer[TAILLEBUF]; // chaine reçue char *chaine; // nombre d'octets lus ou envoyés int nb_octets; // attente de données venant d'un client lg = sizeof(struct sockaddr_in); nb_octets = recvfrom(sock, buffer, TAILLEBUF, 0, (struct sockaddr *)&addr_client, &lg); if (nb_octets == -1) { perror("erreur réception paquet"); exit(1); } // récupère nom de la machine émettrice des données host_client = gethostbyaddr(&(addr_client.sin_addr), sizeof(long), AF_INET); if (host_client == NULL) { perror("erreur gethostbyaddr"); exit(1); } // affichage message reçu et coordonnées émetteur chaine = (char *)malloc(nb_octets * sizeof(char)); memcpy(chaine, buffer, nb_octets); printf("recu message %s de la part de %s depuis le port %d\n", chaine, host_client->h_name, ntohs(addr_client.sin_port)); // envoi de la réponse à l'émetteur nb_octets = sendto(sock, reponse, strlen(reponse)+1, 0, (struct sockaddr*)&addr_client, lg); if (nb_octets == -1) { perror("erreur envoi réponse"); exit(1); } // fermeture la socket close(sock); return 0; }