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