add system tp

master
Antoine PEREDERII 1 year ago
parent be1ac1d7f7
commit 277966a39e

Binary file not shown.

@ -0,0 +1,57 @@
// #include <stdio.h>
// #include <stdlib.h>
// #include <sys/types.h>
// #include <sys/socket.h>
// #include <errno.h>
// #include <netdb.h> /* pour getaddrinfo */
// #include <string.h> /* pour memset */
// #include <arpa/inet.h> /* 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;
// }

@ -0,0 +1,67 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#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;
}

@ -0,0 +1,57 @@
// #include <stdio.h>
// #include <stdlib.h>
// #include <sys/types.h>
// #include <sys/socket.h>
// #include <errno.h>
// #include <netdb.h> /* pour getaddrinfo */
// #include <string.h> /* pour memset */
// #include <arpa/inet.h> /* 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;
// }

@ -0,0 +1,88 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#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;
}

Binary file not shown.

@ -0,0 +1,78 @@
// #include<stdio.h>
// #include <stdlib.h>
// #include<sys/types.h>
// #include <sys/socket.h>
// #include<errno.h>
// #include<netdb.h>
// #include<string.h> /* pourmemset */
// #include<ctype.h> /* pourtoupper */
// #include <arpa/inet.h> /* 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;
// }
Loading…
Cancel
Save