diff --git a/2A/systeme/tp/7_tp/client b/2A/systeme/tp/7_tp/client new file mode 100755 index 0000000..732bd5d Binary files /dev/null and b/2A/systeme/tp/7_tp/client differ diff --git a/2A/systeme/tp/7_tp/client.c b/2A/systeme/tp/7_tp/client.c new file mode 100644 index 0000000..882350a --- /dev/null +++ b/2A/systeme/tp/7_tp/client.c @@ -0,0 +1,57 @@ +// #include +// #include +// #include +// #include +// #include + +// #include /* pour getaddrinfo */ +// #include /* pour memset */ + +// #include /* pour inet_ntop */ + +// #define DGRAM_MAX 1024 /* taille MAX en réception */ + +// void usage() { +// fprintf(stderr,"usage: client hostname port\n"); +// exit(1); +// } + +// int main(int argc, char **argv) { +// struct sockaddr_storage src_addr; +// int s, ret; +// stocklen_t len_src_addr; + +// struct addrinfo hints, *result; + +// char response[DGRAM_MAX]; +// /* Vérification des arguments */ +// if(argc!=3){ +// fprintf(stderr,"Erreur : Nb args !"); +// usage(); +// } +// memset(&hints, 0, sizeof(struct addrinfo)); +// hints.ai_flags = 0; +// hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ +// hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ +// hints.ai_protocol = 0; /* Any protocol */ +// hints.ai_canonname = NULL; +// hints.ai_addr = NULL; +// hints.ai_next = NULL; + +// ret = getaddrinfo(argv[1], argv[2], &hints, &result); +// if(ret != 0) { +// fprintf(stderr, "getaddrinfo : %s\n", gai_strerror(ret)); +// exit(EXIT_FAILURE); +// } +// /* Création de la socket IPv4/IPv6 */ +// if((s=socket(result->ai_family, result->ai_socktype, result->ai_protocol))==-1) { +// perror("socket"); exit(errno); +// } +// /* Envoi du message */ +// if(sendto(s, argv[3], strlen(argv[3]), 0, result->ai_addr, result->ai_addrlen)==-1) { +// perror("sendto"); exit(errno); +// } +// freeaddrinfo(result); +// close(s); +// return 0; +// } \ No newline at end of file diff --git a/2A/systeme/tp/7_tp/client2.c b/2A/systeme/tp/7_tp/client2.c new file mode 100644 index 0000000..0494a50 --- /dev/null +++ b/2A/systeme/tp/7_tp/client2.c @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include +#include +#include + +#define BUFFER_SIZE 1024 + +void usage() { + fprintf(stderr, "Usage: client hostname port\n"); + exit(1); +} + +int main(int argc, char **argv) { + if (argc != 3) { + fprintf(stderr, "Erreur : Nombre incorrect d'arguments !\n"); + usage(); + } + + const char *hostname = argv[1]; + int port = atoi(argv[2]); + + int clientSocket = socket(AF_INET6, SOCK_STREAM, 0); + if (clientSocket == -1) { + perror("Error creating client socket"); + exit(EXIT_FAILURE); + } + + struct sockaddr_in6 serverAddress; + memset(&serverAddress, 0, sizeof(serverAddress)); + serverAddress.sin6_family = AF_INET6; + serverAddress.sin6_port = htons(port); + + // if (inet_pton(AF_INET6, hostname, &(serverAddress.sin6_addr)) <= 0) { + // perror("Error converting IP address"); + // close(clientSocket); + // exit(EXIT_FAILURE); + // } + + if (connect(clientSocket, (struct sockaddr *)&serverAddress, sizeof(serverAddress)) == -1) { + perror("Error connecting to server"); + close(clientSocket); + exit(EXIT_FAILURE); + } + + printf("Connected to server. Receiving file...\n"); + + FILE *file = fopen("received_file.txt", "wb"); + if (!file) { + perror("Error opening file for writing"); + close(clientSocket); + exit(EXIT_FAILURE); + } + + unsigned char buffer[BUFFER_SIZE]; + size_t bytesRead; + while ((bytesRead = recv(clientSocket, buffer, BUFFER_SIZE, 0)) > 0) { + fwrite(buffer, 1, bytesRead, file); + } + + fclose(file); + close(clientSocket); + + return 0; +} diff --git a/2A/systeme/tp/7_tp/received_file.txt b/2A/systeme/tp/7_tp/received_file.txt new file mode 100644 index 0000000..882350a --- /dev/null +++ b/2A/systeme/tp/7_tp/received_file.txt @@ -0,0 +1,57 @@ +// #include +// #include +// #include +// #include +// #include + +// #include /* pour getaddrinfo */ +// #include /* pour memset */ + +// #include /* pour inet_ntop */ + +// #define DGRAM_MAX 1024 /* taille MAX en réception */ + +// void usage() { +// fprintf(stderr,"usage: client hostname port\n"); +// exit(1); +// } + +// int main(int argc, char **argv) { +// struct sockaddr_storage src_addr; +// int s, ret; +// stocklen_t len_src_addr; + +// struct addrinfo hints, *result; + +// char response[DGRAM_MAX]; +// /* Vérification des arguments */ +// if(argc!=3){ +// fprintf(stderr,"Erreur : Nb args !"); +// usage(); +// } +// memset(&hints, 0, sizeof(struct addrinfo)); +// hints.ai_flags = 0; +// hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ +// hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ +// hints.ai_protocol = 0; /* Any protocol */ +// hints.ai_canonname = NULL; +// hints.ai_addr = NULL; +// hints.ai_next = NULL; + +// ret = getaddrinfo(argv[1], argv[2], &hints, &result); +// if(ret != 0) { +// fprintf(stderr, "getaddrinfo : %s\n", gai_strerror(ret)); +// exit(EXIT_FAILURE); +// } +// /* Création de la socket IPv4/IPv6 */ +// if((s=socket(result->ai_family, result->ai_socktype, result->ai_protocol))==-1) { +// perror("socket"); exit(errno); +// } +// /* Envoi du message */ +// if(sendto(s, argv[3], strlen(argv[3]), 0, result->ai_addr, result->ai_addrlen)==-1) { +// perror("sendto"); exit(errno); +// } +// freeaddrinfo(result); +// close(s); +// return 0; +// } \ No newline at end of file diff --git a/2A/systeme/tp/7_tp/server2.c b/2A/systeme/tp/7_tp/server2.c new file mode 100644 index 0000000..273851f --- /dev/null +++ b/2A/systeme/tp/7_tp/server2.c @@ -0,0 +1,88 @@ +#include +#include +#include +#include +#include +#include +#include + +#define BUFFER_SIZE 1024 + +void usage() { + fprintf(stderr, "Usage: serveur port fichier\n"); + exit(1); +} + +int main(int argc, char **argv) { + if (argc != 3) { + fprintf(stderr, "Erreur : Nombre incorrect d'arguments !\n"); + usage(); + } + + int port = atoi(argv[1]); + + int serverSocket = socket(AF_INET6, SOCK_STREAM, 0); + if (serverSocket == -1) { + perror("Error creating server socket"); + exit(EXIT_FAILURE); + } + + struct sockaddr_in6 serverAddress; + memset(&serverAddress, 0, sizeof(serverAddress)); + serverAddress.sin6_family = AF_INET6; + serverAddress.sin6_addr = in6addr_any; + serverAddress.sin6_port = htons(port); + + if (bind(serverSocket, (struct sockaddr *)&serverAddress, sizeof(serverAddress)) == -1) { + perror("Error binding server socket"); + close(serverSocket); + exit(EXIT_FAILURE); + } + + if (listen(serverSocket, 1) == -1) { + perror("Error listening on server socket"); + close(serverSocket); + exit(EXIT_FAILURE); + } + + printf("Server listening on port %d...\n", port); + + while (1) { + int clientSocket = accept(serverSocket, NULL, NULL); + if (clientSocket == -1) { + perror("Error accepting client connection"); + close(serverSocket); + exit(EXIT_FAILURE); + } + + printf("Client connected. Transferring file...\n"); + + FILE *file = fopen(argv[2], "rb"); + if (!file) { + perror("Error opening file for reading"); + close(clientSocket); + continue; // Move on to the next client + } + + // Send file content to client + unsigned char buffer[BUFFER_SIZE]; + size_t bytesRead; + while ((bytesRead = fread(buffer, 1, BUFFER_SIZE, file)) != 0) { + if (send(clientSocket, buffer, bytesRead, 0) == -1) { + perror("Error sending file content to client"); + fclose(file); + close(clientSocket); + continue; + } + } + + printf("File transfer complete.\n"); + + fclose(file); + close(clientSocket); + } + + close(serverSocket); + + return 0; +} diff --git a/2A/systeme/tp/7_tp/serveur b/2A/systeme/tp/7_tp/serveur new file mode 100755 index 0000000..e430676 Binary files /dev/null and b/2A/systeme/tp/7_tp/serveur differ diff --git a/2A/systeme/tp/7_tp/serveur.c b/2A/systeme/tp/7_tp/serveur.c new file mode 100644 index 0000000..3566871 --- /dev/null +++ b/2A/systeme/tp/7_tp/serveur.c @@ -0,0 +1,78 @@ +// #include +// #include +// #include +// #include +// #include +// #include +// #include /* pourmemset */ +// #include /* pourtoupper */ +// #include /* pour inet_ntop */ +// #define DGRAM_MAX 1024 /* taille MAX en réception */ +// void usage() { +// fprintf(stderr,"usage: serveur port fichier\n"); +// exit(1); +// } +// int main(int argc, char **argv) { +// int s, ret; +// socklen_t len_src_addr; + +// struct addrinfo hints, *result; +// struct sockaddr_storage src_addr; + +// char request[DGRAM_MAX]; + +// /* Vérificationd e sarguments */ +// if(argc!=2){ +// fprintf(stderr,"Erreur : Nb args !"); +// usage(); +// } +// memset(&hints, 0, sizeof(struct addrinfo)); +// hints.ai_flags = AI_PASSIVE; /* For wildcard I P address */ +// hints.ai_family = AF_INET6; /* AllowIPv4o rIPv6 */ +// hints.ai_socktype = SOCK_DGRAM; /* Datagramsocket */ +// hints.ai_protocol = 0; /* Any protocol */ +// hints.ai_canonname = NULL; +// hints.ai_addr = NULL; +// hints.ai_next = NULL; + +// ret = getaddrinfo (NULL, argv[1], &hints, &result); +// if(ret != 0) { +// fprintf(stderr, "getaddrinfo : %s\n", gai_strerror(ret)); +// exit(EXIT_FAILURE); +// } +// /* Créationd de la socket IPv4/IPv6 */ +// if((s=socket(result->ai_family, result->ai_socktype, result->ai_protocol))==-1) { +// perror("socket"); exit(errno); +// } +// /* Attachementd el asocket */ +// if(bind(s, result->ai_addr, result->ai_addrlen) == -1) { +// perror("bind"); exit(errno); +// } +// freeaddrinfo (result); +// while(1) { +// /* Attente et lecture d'une requête */ +// len_src_addr = sizeof src_addr; +// if((ret=recvfrom(s, request, DGRAM_MAX-1, 0, (struct sockaddr*) &src_addr, &len_src_addr))==-1) { +// perror("recvfrom"); exit(1); +// } +// request[ret] = 0; + +// puts(request); + +// /* Traitement de la requête (passage en majuscule) */ +// { +// int i=0; +// while(request[i]) { +// request[i]=toupper(request[i]); +// ++i; +// } +// } + +// /* Envoi de la réponse */ +// if(sendto(s, request, strlen(request), 0, (struct sockaddr*) &src_addr, len_src_addr)==-1) { +// perror("sendto"); exit(1); +// } +// } +// close(s); +// return 0; +// } \ No newline at end of file