parent
277966a39e
commit
df2aec255c
@ -1,57 +1,91 @@
|
|||||||
// #include <stdio.h>
|
#include <stdio.h>
|
||||||
// #include <stdlib.h>
|
#include <stdlib.h>
|
||||||
// #include <sys/types.h>
|
#include <sys/types.h>
|
||||||
// #include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
// #include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
#include <unistd.h> /* pour read(2)/write(2) */
|
||||||
|
|
||||||
|
#include <netdb.h> /* pour getaddrinfo*/
|
||||||
|
#include <string.h> /* pour memset */
|
||||||
|
|
||||||
|
#include <arpa/inet.h> /* pour inet_ntop */
|
||||||
|
|
||||||
|
#define LINE_MAX 1024 /* taille MAX en réception */
|
||||||
|
|
||||||
|
void usage() {
|
||||||
|
fprintf(stderr,"usage : client hostname port\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
// #include <netdb.h> /* pour getaddrinfo */
|
int main(int argc, char **argv) {
|
||||||
// #include <string.h> /* pour memset */
|
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 <arpa/inet.h> /* pour inet_ntop */
|
while(fgets(msg, LINE_MAX, stdin) != NULL) {
|
||||||
|
|
||||||
// #define DGRAM_MAX 1024 /* taille MAX en réception */
|
msg[strlen(msg)-1]=0; /* retire '\n' final */
|
||||||
|
|
||||||
// void usage() {
|
/* Émission */
|
||||||
// fprintf(stderr,"usage: client hostname port\n");
|
if(send(s, msg, strlen(msg)+1, 0) != strlen(msg)+1) {
|
||||||
// exit(1);
|
perror("send"); exit(1);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// int main(int argc, char **argv) {
|
/* Attente et lecture de la réponse */
|
||||||
// struct sockaddr_storage src_addr;
|
ret=recv(s, response, LINE_MAX, 0);
|
||||||
// int s, ret;
|
|
||||||
// stocklen_t len_src_addr;
|
if(ret==0) {
|
||||||
|
fprintf(stderr, "Déconnexion du serveur !\n");
|
||||||
// struct addrinfo hints, *result;
|
exit(1);
|
||||||
|
}
|
||||||
// char response[DGRAM_MAX];
|
|
||||||
// /* Vérification des arguments */
|
else if(ret == -1) {
|
||||||
// if(argc!=3){
|
perror("recv"); exit(1);
|
||||||
// fprintf(stderr,"Erreur : Nb args !");
|
}
|
||||||
// usage();
|
/* Traitement de la réponse */
|
||||||
// }
|
puts(response);
|
||||||
// memset(&hints, 0, sizeof(struct addrinfo));
|
}
|
||||||
// hints.ai_flags = 0;
|
|
||||||
// hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */
|
if(close(s)==-1) {
|
||||||
// hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */
|
perror("close"); exit(1);
|
||||||
// hints.ai_protocol = 0; /* Any protocol */
|
}
|
||||||
// hints.ai_canonname = NULL;
|
|
||||||
// hints.ai_addr = NULL;
|
return 0;
|
||||||
// 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;
|
|
||||||
// }
|
|
Binary file not shown.
Binary file not shown.
@ -1,67 +0,0 @@
|
|||||||
#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,89 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#include <unistd.h> /* pour read(2)/write(2) */
|
||||||
|
|
||||||
|
#include <netdb.h> /* pour getaddrinfo*/
|
||||||
|
#include <string.h> /* pour memset */
|
||||||
|
|
||||||
|
#include <arpa/inet.h> /* 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;
|
||||||
|
}
|
@ -1,57 +0,0 @@
|
|||||||
// #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;
|
|
||||||
// }
|
|
Binary file not shown.
@ -1,88 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@ -0,0 +1,131 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <unistd.h> /* pour read(2)/write(2) */
|
||||||
|
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <string.h> /* pour memset */
|
||||||
|
|
||||||
|
#include <ctype.h> /* pour toupper */
|
||||||
|
|
||||||
|
#include <arpa/inet.h> /* 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;
|
||||||
|
}
|
@ -1,78 +1,121 @@
|
|||||||
// #include<stdio.h>
|
#include <stdio.h>
|
||||||
// #include <stdlib.h>
|
#include <stdlib.h>
|
||||||
// #include<sys/types.h>
|
#include <sys/types.h>
|
||||||
// #include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
// #include<errno.h>
|
#include <errno.h>
|
||||||
// #include<netdb.h>
|
#include <unistd.h> /* pour read(2)/write(2) */
|
||||||
// #include<string.h> /* pourmemset */
|
|
||||||
// #include<ctype.h> /* pourtoupper */
|
#include <netdb.h>
|
||||||
// #include <arpa/inet.h> /* pour inet_ntop */
|
#include <string.h> /* pour memset */
|
||||||
// #define DGRAM_MAX 1024 /* taille MAX en réception */
|
|
||||||
// void usage() {
|
#include <ctype.h> /* pour toupper */
|
||||||
// fprintf(stderr,"usage: serveur port fichier\n");
|
|
||||||
// exit(1);
|
#include <arpa/inet.h> /* pour inet_ntop */
|
||||||
// }
|
|
||||||
// int main(int argc, char **argv) {
|
#define REQUEST_MAX 1024 /* taille MAX en réception */
|
||||||
// int s, ret;
|
|
||||||
// socklen_t len_src_addr;
|
void usage() {
|
||||||
|
fprintf(stderr,"usage : serveur port\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
// struct addrinfo hints, *result;
|
int main(int argc, char **argv) {
|
||||||
// struct sockaddr_storage src_addr;
|
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 */
|
while(1) { /* boucle du serveur */
|
||||||
// if(argc!=2){
|
|
||||||
// fprintf(stderr,"Erreur : Nb args !");
|
/* Attente d'une connexion */
|
||||||
// usage();
|
|
||||||
// }
|
puts("En attente de connexion...");
|
||||||
// memset(&hints, 0, sizeof(struct addrinfo));
|
|
||||||
// hints.ai_flags = AI_PASSIVE; /* For wildcard I P address */
|
len_src_addr=sizeof src_addr;
|
||||||
// hints.ai_family = AF_INET6; /* AllowIPv4o rIPv6 */
|
if((sock=accept(s, (struct sockaddr *)&src_addr,
|
||||||
// hints.ai_socktype = SOCK_DGRAM; /* Datagramsocket */
|
&len_src_addr))==-1) {
|
||||||
// hints.ai_protocol = 0; /* Any protocol */
|
perror("accept"); exit(1);
|
||||||
// hints.ai_canonname = NULL;
|
}
|
||||||
// hints.ai_addr = NULL;
|
|
||||||
// hints.ai_next = NULL;
|
puts("Connexion acceptée !");
|
||||||
|
|
||||||
// ret = getaddrinfo (NULL, argv[1], &hints, &result);
|
/* boucle de traitement du client */
|
||||||
// if(ret != 0) {
|
|
||||||
// fprintf(stderr, "getaddrinfo : %s\n", gai_strerror(ret));
|
while((ret=recv(sock, request, REQUEST_MAX,0))>0) {
|
||||||
// exit(EXIT_FAILURE);
|
|
||||||
// }
|
request[ret]=0;
|
||||||
// /* Créationd de la socket IPv4/IPv6 */
|
|
||||||
// if((s=socket(result->ai_family, result->ai_socktype, result->ai_protocol))==-1) {
|
/* traitement de la requête(passage en majuscule) */
|
||||||
// perror("socket"); exit(errno);
|
{
|
||||||
// }
|
int i=0;
|
||||||
// /* Attachementd el asocket */
|
|
||||||
// if(bind(s, result->ai_addr, result->ai_addrlen) == -1) {
|
while(request[i]) {
|
||||||
// perror("bind"); exit(errno);
|
request[i]=toupper(request[i]);
|
||||||
// }
|
++i;
|
||||||
// freeaddrinfo (result);
|
}
|
||||||
// while(1) {
|
}
|
||||||
// /* Attente et lecture d'une requête */
|
/* Émission de la réponse */
|
||||||
// len_src_addr = sizeof src_addr;
|
|
||||||
// if((ret=recvfrom(s, request, DGRAM_MAX-1, 0, (struct sockaddr*) &src_addr, &len_src_addr))==-1) {
|
if(send(sock, request, strlen(request)+1,0) !=
|
||||||
// perror("recvfrom"); exit(1);
|
strlen(request)+1) {
|
||||||
// }
|
perror("send"); exit(1);
|
||||||
// request[ret] = 0;
|
}
|
||||||
|
} /* fin de la boucle de traitement du client */
|
||||||
// puts(request);
|
|
||||||
|
if(close(sock)==-1) {
|
||||||
// /* Traitement de la requête (passage en majuscule) */
|
perror("close"); exit(1);
|
||||||
// {
|
}
|
||||||
// int i=0;
|
|
||||||
// while(request[i]) {
|
fprintf(stderr, "Fin de connexion !\n");
|
||||||
// request[i]=toupper(request[i]);
|
if(ret==-1) {
|
||||||
// ++i;
|
perror("recv");
|
||||||
// }
|
}
|
||||||
// }
|
|
||||||
|
} /* fin boucle principale du serveur */
|
||||||
// /* Envoi de la réponse */
|
|
||||||
// if(sendto(s, request, strlen(request), 0, (struct sockaddr*) &src_addr, len_src_addr)==-1) {
|
return 0;
|
||||||
// perror("sendto"); exit(1);
|
}
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// close(s);
|
|
||||||
// return 0;
|
|
||||||
// }
|
|
Binary file not shown.
Loading…
Reference in new issue