From df2aec255cf0bd254bcb94aee9a3f2b20d1346b9 Mon Sep 17 00:00:00 2001 From: anperederi Date: Wed, 29 Nov 2023 11:28:39 +0100 Subject: [PATCH] add system's tp --- 2A/systeme/tp/7_tp/client.c | 144 +++++++++++------- 2A/systeme/tp/7_tp/{serveur => client1} | Bin 33912 -> 33912 bytes 2A/systeme/tp/7_tp/{client => client2} | Bin 33776 -> 33736 bytes 2A/systeme/tp/7_tp/client2.c | 67 --------- 2A/systeme/tp/7_tp/client2v2.c | 89 +++++++++++ 2A/systeme/tp/7_tp/received_file.txt | 57 ------- 2A/systeme/tp/7_tp/server2 | Bin 0 -> 34000 bytes 2A/systeme/tp/7_tp/server2.c | 88 ----------- 2A/systeme/tp/7_tp/server2v2.c | 131 ++++++++++++++++ 2A/systeme/tp/7_tp/serveur.c | 191 +++++++++++++++--------- 2A/systeme/tp/7_tp/serveur1 | Bin 0 -> 33952 bytes 11 files changed, 426 insertions(+), 341 deletions(-) rename 2A/systeme/tp/7_tp/{serveur => client1} (90%) rename 2A/systeme/tp/7_tp/{client => client2} (90%) delete mode 100644 2A/systeme/tp/7_tp/client2.c create mode 100644 2A/systeme/tp/7_tp/client2v2.c delete mode 100644 2A/systeme/tp/7_tp/received_file.txt create mode 100755 2A/systeme/tp/7_tp/server2 delete mode 100644 2A/systeme/tp/7_tp/server2.c create mode 100644 2A/systeme/tp/7_tp/server2v2.c create mode 100755 2A/systeme/tp/7_tp/serveur1 diff --git a/2A/systeme/tp/7_tp/client.c b/2A/systeme/tp/7_tp/client.c index 882350a..dccad7e 100644 --- a/2A/systeme/tp/7_tp/client.c +++ b/2A/systeme/tp/7_tp/client.c @@ -1,57 +1,91 @@ -// #include -// #include -// #include -// #include -// #include +#include +#include +#include +#include +#include + +#include /* pour read(2)/write(2) */ + +#include /* pour getaddrinfo*/ +#include /* pour memset */ + +#include /* pour inet_ntop */ + +#define LINE_MAX 1024 /* taille MAX en réception */ + +void usage() { + fprintf(stderr,"usage : client hostname port\n"); + exit(1); +} -// #include /* pour getaddrinfo */ -// #include /* pour memset */ +int main(int argc, char **argv) { + int s, ret; + + struct addrinfo hints, *result; + + char msg[LINE_MAX]; + char response[LINE_MAX]; + + + /* Vérification des arguments */ + if(argc!=3) { + fprintf(stderr,"Erreur : Nb args !\n"); + usage(); + } + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_flags = 0; + hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ + hints.ai_socktype = SOCK_STREAM; /* socket TCP (flux) */ + 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(1); + } + + /* Connexion au serveur */ + if(connect(s, result->ai_addr, result->ai_addrlen)) { + perror("connect"); exit(1); + } + + freeaddrinfo(result); // si result ne sert plus -// #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 + while(fgets(msg, LINE_MAX, stdin) != NULL) { + + msg[strlen(msg)-1]=0; /* retire '\n' final */ + + /* Émission */ + if(send(s, msg, strlen(msg)+1, 0) != strlen(msg)+1) { + perror("send"); exit(1); + } + + /* Attente et lecture de la réponse */ + ret=recv(s, response, LINE_MAX, 0); + + if(ret==0) { + fprintf(stderr, "Déconnexion du serveur !\n"); + exit(1); + } + + else if(ret == -1) { + perror("recv"); exit(1); + } + /* Traitement de la réponse */ + puts(response); + } + + if(close(s)==-1) { + perror("close"); exit(1); + } + + return 0; +} \ No newline at end of file diff --git a/2A/systeme/tp/7_tp/serveur b/2A/systeme/tp/7_tp/client1 similarity index 90% rename from 2A/systeme/tp/7_tp/serveur rename to 2A/systeme/tp/7_tp/client1 index e430676353208b0bff9a0a61185adb54ca687f37..29e995353f844c461b615e5c349b064c92dc01f1 100755 GIT binary patch literal 33912 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 V+^K(_pf)F{{S%yb5C3a7^KZ)nq-_8I literal 33776 zcmeI5U2IfE6vt;Rl~O*oegyo)OB5|67Ajy60~BH7C47dK1SL3bcki}0?e5*&z1tSQ zvbC(bZYsX`5kw`%AR%hj3aK%vlt2`H@GF`qPfd*GVlW{-Xu+iQf9Bq8x7YgOlMiQ- zGiT13nKNg8clL2+zq<0<*i0cpRYHiXAax`&gvbjGEg^1%=nyG)Zg?>AaAemG@=h(G zsphm6#d!_`rEH1pX_-1i&2O6O6TV#yHwjWwMM}r$aeM>dHdGX3AlU-SA{CHRUPAOv<$2L=K6ZX{op7rCM_xs7NEPmP( zE-ACAZZj2^W-4L98_e&>dN02{{tU8%F(!hcLEqt3h?JW)v}}+YcWiI=w$|juDRU2M zIv*s&md=QjZC1r+_}6$jj8&z{o9|nKc+D#t(39tE>*noSBAYgsf#(8w!KQMFl0l(- z)cH}C5G#eqQGWE5>(Q~ox9fX_+7hw30g{G&J#>Aa5a*z0Lv})_P&^V^g3gYL2R&UW zJuSq-X*y_c8e|S+SvF%Y>oi-J#rJo{VNBRJ=kh1OjSp+4F(Ec}c@ler+D=KUGRNH#psfV|9B zHAvhEMe*Bvg{XmE;@iZF3lm@hOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zFg=0Ydf{iiSiKwf67}M0y?@m>Zud0~yI(?`qDzDB09uKL@NEZF05!h%Vp@%_p0AY9 z3z5;!@)!RaAEz;eAr~#ZaB>8yPZ?F=1Gl0F3thw|NN=GJ5w|2<1Iq0h$An^@Cg{bc z8oiMJK{b6(Pn~-ch86PP!F!6XM}9)7HGb=EQSPtRLR623^LNui{cE43xHJokT53_W zwvFodoeSp=VYauq@6poxhf0{*_{Yb$V5&O;*Qfap;8|Ey3x)?r-7K8p!Qn#wF#JVT zCkpuiGKOefz5gV|@FF~h!F{7hg)U4Yl`y4p5KeEb+kz&t`cWk}nbi!qy{y*Lfc~|= zLxIp<&zeKS`&TWXU`xqW$RDGX`-Vt~iPbKn&s~JdU+ou4qFCJ#SnXxFz16-!>jK1| zfUR7jtZH>0wO19dDW~O2mTro$B-xamnvPsOz zXp7W9%hqDH5p{5VyBsZJ#X1a!qEM%mN?|5-JC>F)>@LF=8$G8HpY%0oyNsA&cG19u z*=aO1G}H>L36~L<%H!Y?dv~iJ*Ge0y@>nf_g}QB%RsmORPtY-^QmJt|)ZO+bXp-{1 zbZS=?y2CsNQR-AA)k7fzr7q_=>v9wqH-K|Ak2Jop(sT!(Z10|XT@G&sD4XsGlYf@4 zYkf^;g#2_5ne<#=dw0I;a$#kQoTs>E0!)AjFaajO1egF5U;<2l2`~XBzyz286JP>N zfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz286JP>N zfC(@GCcp%k025#WOn?b60Vco%G$5e=K7SEH|NUM0K!A7uA5IkdFY$6w?Iyei&{Xz# z^Fnw)AcQ{=4{e3CLQ;??ATK};L5@Q{f_wov5BU{x1yUOlq4`)@N||w@u?`t)?~sY8 z**VqImW|qR&lNXpJ1u0?u}mRjomR$x@*ZOl(&#ZAArrnkK`$)8OxtG4NuWUwEMR!j zNM`W5gG?ioWkdV@c&njHNdN5zZ-XHz7Ep^GNT?Dc-Ka|4Xv$T!uEUoKO3+Q2JBY?_L~9woq+vbz$S+D z_5{5 -#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/client2v2.c b/2A/systeme/tp/7_tp/client2v2.c new file mode 100644 index 0000000..1020d3b --- /dev/null +++ b/2A/systeme/tp/7_tp/client2v2.c @@ -0,0 +1,89 @@ +#include +#include +#include +#include +#include + +#include /* pour read(2)/write(2) */ + +#include /* pour getaddrinfo*/ +#include /* pour memset */ + +#include /* pour inet_ntop */ + +#define LINE_MAX 1024 /* taille MAX en réception */ + +void usage() { + fprintf(stderr,"usage : client hostname port\n"); + exit(1); +} + +int main(int argc, char **argv) { + int s, ret; + + struct addrinfo hints, *result; + + char msg[LINE_MAX]; + char response[LINE_MAX]; + + + /* Vérification des arguments */ + if(argc!=3) { + fprintf(stderr,"Erreur : Nb args !\n"); + usage(); + } + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_flags = 0; + hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ + hints.ai_socktype = SOCK_STREAM; /* socket TCP (flux) */ + 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(1); + } + + /* Connexion au serveur */ + if(connect(s, result->ai_addr, result->ai_addrlen)) { + perror("connect"); exit(1); + } + + freeaddrinfo(result); // si result ne sert plus + +// while(fgets(msg, LINE_MAX, stdin) != NULL) { + + // msg[strlen(msg)-1]=0; /* retire '\n' final */ + + // /* Émission */ + // if(send(s, "msg", strlen(msg)+1, 0) != strlen(msg)+1) { + // perror("send"); exit(1); + // } + + /* Attente et lecture de la réponse */ + while((ret=recv(s, response, LINE_MAX, 0))!=-1) { + if(ret==0) { + fprintf(stderr, "Déconnexion du serveur !\n"); + exit(1); + } + + else if(ret == -1) { + perror("recv"); exit(1); + } + puts(response); + } + + if(close(s)==-1) { + perror("close"); exit(1); + } + + return 0; +} \ No newline at end of file diff --git a/2A/systeme/tp/7_tp/received_file.txt b/2A/systeme/tp/7_tp/received_file.txt deleted file mode 100644 index 882350a..0000000 --- a/2A/systeme/tp/7_tp/received_file.txt +++ /dev/null @@ -1,57 +0,0 @@ -// #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 b/2A/systeme/tp/7_tp/server2 new file mode 100755 index 0000000000000000000000000000000000000000..04152faf30d81bfa04b0dd493ae2c25ac0012de9 GIT binary patch literal 34000 zcmeI5e{38_702grj=JuTGo?TZZP@^Zf>I|ArAmVmY*L2}h19f(6qUemzT2~}vG0!E zJ=YOZd%@X?>*|0~rHT+jsszFX2}MYeP|!6Ig}D4x{z0Ispr{43MlFg^lv@1J{ra2ND3u#fO1%RzOxdJVpe(eMx&>lGw4R#y z+~h-(58O}h#**7;zNN)D-@-tx4^AFFxN(S?KfckY5<3q!1xqqTYu{P)69Xz6@AN&` z4E&EL6KMD6npvAv%jl%i+Vh*!-nuIr@9sTuJU1CZJ6#5oc<)S{T9-WEt=4AN?T!0g zPU4wGVhrtc;X6ndt(&z+sEl#^X4B?pe+AK_Oe75v^zHsn-Det>Z0YtSRI1{KQh^_3pj_&2`1+>!ZGsd4EO6G)LT(j?ap%B~xcTDmwGa%qI!^KT@7`GaO{npg=k;agA zaD+=)>lK1Kxs1;4@4*}GFthVN0~b5Qza;!w+{TN;{{gMA%ehHFY}Z@e`iICROwl?4>o}O4fM=cJzdqkRQlIyb11jop+i6 z$qQK=2EgBP-iPRJ2ZLPyQkO~T6B8(`stEA7-mnop01VuR1;FSoP+D^rMbH2sD0JihG%diu2WhtcYtpNdzQ4uD^$GWJ`PRk-%n>dU2yhs z7deN!y?_~)^#*SIwqj$r#dx$io*Jj#X#V}6jsHN5M$Q1Ec^>G;|1U-lC7SoC>E|h; zz9G@P7frj6==d)4aO+)(eN&?2yWzvFn~kknv65N{2mv7=1cZPP5CTF#2nYcoAOwVf z5D)@FKnMr{As_^VfDjM@LO=)z0U;m+gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf z5D)@FKnMr{As_^VfDjM@LO=)z0U;m+guvUEfQ79w#l$j%zjdBU48W`x>xI81-Y=#- zj%)zqeNQ|uhXevST-wj!$H#MDh4_#Yknci%2>B`GEaU|U5@6&a$flgiSrDYx$bBC2 z5aeOV0_2;?YP8ml>(*WT(!BQkV(F+Z%^ua2Vs&n#XQo+n%dxAB2@R!_91Yqee$a8A z1&s_2zS5P%s?;0E2B9krq>Jz?Xt+)hL7<@H91=>;6svf$o2(+0UP9?4orIou<~^jC z(2ZnJqv?A}dk!*A=p_9_A6HJR_p!}{3j^w+hw8M4rky~f7x+9M|fZRUz7purpwv_A}iX490dsMGeIjQypI zeI#R-Gxoz7`|BC|k&OLV#(q3weeDjQwK9{$s}ebH;u(V>3?% zzY*rcU@i>i!C(#y=D%R>3+BCG&I{(d;9Fvz3%)|;w_t7yes6qdJPZ9;%(cNh8~=}( U7CwdlK2h47C>@`ux7C;RA9tgR=l}o! literal 0 HcmV?d00001 diff --git a/2A/systeme/tp/7_tp/server2.c b/2A/systeme/tp/7_tp/server2.c deleted file mode 100644 index 273851f..0000000 --- a/2A/systeme/tp/7_tp/server2.c +++ /dev/null @@ -1,88 +0,0 @@ -#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/server2v2.c b/2A/systeme/tp/7_tp/server2v2.c new file mode 100644 index 0000000..fb73bab --- /dev/null +++ b/2A/systeme/tp/7_tp/server2v2.c @@ -0,0 +1,131 @@ +#include +#include +#include +#include +#include +#include /* pour read(2)/write(2) */ + +#include +#include /* pour memset */ + +#include /* pour toupper */ + +#include /* pour inet_ntop */ + +#define REQUEST_MAX 1024 /* taille MAX en réception */ +#define BUFFER_SIZE 1024 + +void usage() { + fprintf(stderr,"usage : serveur port fichier\n"); + exit(1); +} + +int main(int argc, char **argv) { + int s, sock, ret; + + struct addrinfo hints, *result; + + struct sockaddr_storage src_addr; + socklen_t len_src_addr; + + char request[REQUEST_MAX]; + + /* Vérification des arguments */ + if(argc!=3) { + fprintf(stderr,"Erreur : Nb args !\n"); + usage(); + } + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_flags = AI_PASSIVE; /* Equiv INADDR_ANY */ + hints.ai_family = AF_INET6; /* Allow IPv4 or IPv6 */ + hints.ai_socktype = SOCK_STREAM; /* Flux => TCP */ + 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éation de la socket IPv4/IPv6 */ + if((s=socket(result->ai_family, result->ai_socktype, + result->ai_protocol))==-1) { + perror("socket"); exit(1); + } + + /* Attachement de la socket */ + + if (bind(s, result->ai_addr, result->ai_addrlen) == -1) { + perror("bind"); exit(1); + } + + freeaddrinfo(result); + + /* définition de la taille de la file d'attente */ + + if(listen(s, 5)) { + perror("listen"); exit(1); + } + + FILE *file = fopen(argv[2], "rb"); + if (!file) { + perror("Pb fichier, impossible ouverture !"); + close(sock); + exit(errno);// Move on to the next client + } + + while(1) { /* boucle du serveur */ + + /* Attente d'une connexion */ + + puts("En attente de connexion..."); + + len_src_addr=sizeof src_addr; + if((sock=accept(s, (struct sockaddr *)&src_addr, + &len_src_addr))==-1) { + perror("accept"); exit(1); // exit errno que si on s'en sert. + } + + puts("Connexion acceptée !"); + + rewind(file); + + /* boucle de traitement du client */ + + // while((ret=recv(sock, request, REQUEST_MAX,0))>0) { + + // request[ret]=0; + + // /* traitement de la requête(passage en majuscule) */ + // { + // int i=0; + // Send file content to client + unsigned char buffer[BUFFER_SIZE]; + size_t bytesRead; + while ((bytesRead = fread(buffer, 1, BUFFER_SIZE, file)) != 0) { + if (send(sock, buffer, bytesRead, 0) == -1) { + perror("Pb impossible d'envoyer le fichier au client"); + fclose(file); + close(sock); + continue; + } + } + // } + // } /* fin de la boucle de traitement du client */ + + if(close(sock)==-1 && fclose(file)==-1) { + perror("close"); exit(errno); + } + + fprintf(stderr, "Fin de connexion !\n"); + if(ret==-1) { + perror("recv"); + } + + } /* fin boucle principale du serveur */ + + return 0; +} \ No newline at end of file diff --git a/2A/systeme/tp/7_tp/serveur.c b/2A/systeme/tp/7_tp/serveur.c index 3566871..149acb7 100644 --- a/2A/systeme/tp/7_tp/serveur.c +++ b/2A/systeme/tp/7_tp/serveur.c @@ -1,78 +1,121 @@ -// #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; +#include +#include +#include +#include +#include +#include /* pour read(2)/write(2) */ + +#include +#include /* pour memset */ + +#include /* pour toupper */ + +#include /* pour inet_ntop */ + +#define REQUEST_MAX 1024 /* taille MAX en réception */ + +void usage() { + fprintf(stderr,"usage : serveur port\n"); + exit(1); +} -// struct addrinfo hints, *result; -// struct sockaddr_storage src_addr; +int main(int argc, char **argv) { + int s, sock, ret; + + struct addrinfo hints, *result; + + struct sockaddr_storage src_addr; + socklen_t len_src_addr; + + char request[REQUEST_MAX]; + + /* Vérification des arguments */ + if(argc!=2) { + fprintf(stderr,"Erreur : Nb args !\n"); + usage(); + } + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_flags = AI_PASSIVE; /* Equiv INADDR_ANY */ + hints.ai_family = AF_INET6; /* Allow IPv4 or IPv6 */ + hints.ai_socktype = SOCK_STREAM; /* Flux => TCP */ + 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); + } -// char request[DGRAM_MAX]; + /* Création de la socket IPv4/IPv6 */ + if((s=socket(result->ai_family, result->ai_socktype, + result->ai_protocol))==-1) { + perror("socket"); exit(1); + } + + /* Attachement de la socket */ + + if (bind(s, result->ai_addr, result->ai_addrlen) == -1) { + perror("bind"); exit(1); + } + + freeaddrinfo(result); + + /* définition de la taille de la file d'attente */ + + if(listen(s, 5)) { + perror("listen"); exit(1); + } -// /* 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; + while(1) { /* boucle du serveur */ + + /* Attente d'une connexion */ + + puts("En attente de connexion..."); + + len_src_addr=sizeof src_addr; + if((sock=accept(s, (struct sockaddr *)&src_addr, + &len_src_addr))==-1) { + perror("accept"); exit(1); + } + + puts("Connexion acceptée !"); -// 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 + /* boucle de traitement du client */ + + while((ret=recv(sock, request, REQUEST_MAX,0))>0) { + + request[ret]=0; + + /* traitement de la requête(passage en majuscule) */ + { + int i=0; + + while(request[i]) { + request[i]=toupper(request[i]); + ++i; + } + } + /* Émission de la réponse */ + + if(send(sock, request, strlen(request)+1,0) != + strlen(request)+1) { + perror("send"); exit(1); + } + } /* fin de la boucle de traitement du client */ + + if(close(sock)==-1) { + perror("close"); exit(1); + } + + fprintf(stderr, "Fin de connexion !\n"); + if(ret==-1) { + perror("recv"); + } + + } /* fin boucle principale du serveur */ + + return 0; +} \ No newline at end of file diff --git a/2A/systeme/tp/7_tp/serveur1 b/2A/systeme/tp/7_tp/serveur1 new file mode 100755 index 0000000000000000000000000000000000000000..027f84a5a3759e8db5be8b0a3d1164ea2181cb41 GIT binary patch literal 33952 zcmeI5UyNK;9mmhmt}LbPEDBn*$^|JFgIkK$lp1tvyK)IwHg=mdNOG8+y}LW+j7w zu^8B&NheV6%#~SdO;g&mvbG*JM(WF^tiPk5cm5{R5!Aa&Z|d)TsnObEJ*<_=)U!Ui{c#^oh@ZW?hj-gO z_wU>9c4NT#>2S}sJRcOY(I}(#*sKon586<0={};fg7wxSO>g1(G2`B+2pahhF5>Nt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNI@^o>4T9>cWXOJn@j;Nn6w`LCrVj%m$Lpy#(vJ%najlq>QxAH@^Q_>s)ui{{|> zq)B$5Ne(YzLVMoBgzf)4b32A6pM!lNqJ>c`L^q@NG3jkxw%vvvOvYb`cCK^>R=R$t z8%GSrkE^}g&$Sl(_HjD)+wDzgl2>qALXdBFqq$v4&s?PgPV}^U* zFVVxR9_Qe{p&!rFkKaC3MRUer<=cOr{6StIX8;R2wuWES>`*vE!(7p2?$ ziF=Tr;l;|-m_O^R$@B0qdp@}m8a{q8bPJW(YP^zM`M0KLq?2rsYkeO=rKV0K>8Z|IB+;1_=@diYNEV1)b7 zaKd>n6`OMtJ?=yQ(x3l>7a}r~zj|p)8Rn%eO{u>r^^DYyNzMD?OIse7`l!^$r2dxF z-;w&eQh!hC6H-4V^)pgGEA<@eM!hf|c)PrMP&*tnYF@Qc3)h*!T8+vsZ{LVlsEyaX z8`qifAS{fI;!5{eWtX?5zRuJu#X~`8MsO?JOqOtkwrmE=ULiy$47}06D^|+o;7F-b z?(gq6g<>(NhGtL4<~hSpe-L;#ntA{q#mP!NFkdQ_SIyuECO=sw9(kE{GHaUkaz7}cu{Zq&9hP22TAT93* z(|%Rju1j0qr>33z&2~fD@?JFceA>FZ%ze#kQr+DN?`wWQbklT=)=EGLC;=s)1eAah zPy$Lo2`B+2pahhF5>Nt4KnW-TC7=Y9fD%vwNNt4KnW-TC7=Y9fD%vwNIg{HA zxec-tvKKN0c?eQPB-Yw`SSTK{#fd|9tWcU&$+A#+@}vh^62pY->EY{1a;3;u{8GSCJzmU;SX7tk;{cJ{mC8Pf$qyILeU(D#tgTb5^ z%y+?D7tC|P92d-Q!Q2+iYr&ir%xA$}VIB)^8S_{0Te=RyJ)$3eOU$G3zwqbb%>Vbv Ov2t>(J2~%(FXtWO{CRNz literal 0 HcmV?d00001