PIR/Client.c

87 lines
2.2 KiB
C

/* librairie standard ... */
/* déclaration des types de base */
#include <sys/types.h>
/* constantes relatives aux domaines, types et protocoles */
#include <sys/socket.h>
/* constantes et structures propres au domaine INTERNET */
#include <netinet/in.h>
/* structures retournées par les fonctions de gestion de la base de
données du réseau */
#include <netdb.h>
/* pour les entrées/sorties */
#include <stdio.h>
/* la lib standard */
#include <stdlib.h>
/* pour le fork */
#include <unistd.h>
/* pour memcpy */
#include <string.h>
/* 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;
}