/* librairie standard ... */ /* déclaration des types de base */ #include /* constantes relatives aux domaines, types et protocoles */ #include /* constantes et structures propres au domaine INTERNET */ #include /* structures retournées par les fonctions de gestion de la base de données du réseau */ #include /* pour les entrées/sorties */ #include /* la lib standard */ #include /* pour le fork */ #include /* pour memcpy */ #include /* pour le scanf permissif */ #define SIZE_MAX 32767 int main (int argc, char * argv[]) { if (argc != 3) { printf("ERREUR : Usage : ./client AdresseServeur N°Port\n"); exit(2); } int sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { printf("ERREUR lors de la création du socket\n"); exit(1); } // On cree l'adresse du socket target struct sockaddr_in addr_target; addr_target.sin_family = AF_INET; addr_target.sin_port = atoi(argv[2]); struct hostent * hoststruct = gethostbyname(argv[1]); if (hoststruct == NULL){ printf("ERREUR lors de la recherche de l'adresse IP du target\n"); exit(1); } memcpy((char *)&(addr_target.sin_addr.s_addr), hoststruct->h_addr, hoststruct->h_length); int retour_connexion; //On fait de demande de connextion au socket target retour_connexion = connect(sock, (struct sockaddr *)&addr_target, sizeof(struct sockaddr_in)); if (retour_connexion == -1){ printf("ERREUR lors de la demande de connexion\n"); exit(1); } printf("Que souhaitez vous faire : [PRINT|ADD|SUB|MUL|DIV|RESET|GET]\n"); // Lecture de la requette char buff[SIZE_MAX]; scanf("%s", buff); // Envoi de la requette send(sock, buff, strlen(buff), 0); // Si arg en envoyer ou réponse a recevoir if (!strcmp(buff, "ADD") || !strcmp(buff, "SUB") || !strcmp(buff, "MUL") || !strcmp(buff, "DIV")) { printf("Veuillez saisir l'argument\n"); // Lecture de l'argument int arg; scanf("%d", &arg); // Envoi de la requette sprintf(buff, "%d", arg); send(sock, buff, strlen(buff), 0); } else if (!strcmp(buff, "GET")) { char buffer[SIZE_MAX]; read(sock, buffer, SIZE_MAX); printf("La valeur est : %s\n", buffer); } close(sock); return 0; }