You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
1.7 KiB

#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;
}