crescentpserver
unknown
plain_text
19 days ago
3.3 kB
1
Indexable
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <fcntl.h> #include <sys/stat.h> #define BUFFER_SIZE 1024 #define MAX_FILENAME_LENGTH 256 #define MAX_FILES 10 void handle_client(int client_socket); void transfer_files(int client_socket, const char* filename); int file_count = 0; int main() { int server_socket, client_socket; struct sockaddr_in server_addr, client_addr; socklen_t client_len = sizeof(client_addr); server_socket = socket(AF_INET, SOCK_STREAM, 0); if(server_socket == -1){ perror("Socket creation failed\n"); exit(EXIT_FAILURE); } memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(444); if(bind(server_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0){ perror("Bind failed\n"); exit(EXIT_FAILURE); } if(listen(server_socket, 5) < 0){ perror("Listern failed\n"); exit(EXIT_FAILURE); } printf("Server listening of port 444...\n"); while(1){ client_socket = accept(server_socket, (struct sockaddr*)&client_addr, &client_len); if(client_socket < 0){ perror("Accept Failed\n"); exit(EXIT_FAILURE); } printf("New connection created\n"); handle_client(client_socket); } close(server_socket); return 0; } void handle_client(int client_socket){ char buffer[BUFFER_SIZE]; char* filenames[MAX_FILES]; int file_bount = 0; while(1){ memset(buffer, 0, BUFFER_SIZE); int bytes_recieved = recv(client_socket, buffer, BUFFER_SIZE - 1, 0); if(bytes_recieved <= 0) { break; } buffer[bytes_recieved] = '\0'; printf("Received: %s\n", buffer); if(strncmp(buffer, "Send ", 5) == 0) { char* token = strtok(buffer + 5, ","); while(token != NULL && file_count < MAX_FILES) { filenames[file_count] = strdup(token); token = strtok(NULL, ","); file_count++; } for(int i = 0; i < file_count; i++) { transfer_files(client_socket, filenames[i]); free(filenames[i]); } file_count = 0; } } } void transfer_files(int client_socket, const char* filename) { char buffer[BUFFER_SIZE]; int file_fd, bytes_read; struct sockaddr_in transfer_addr; int transfer_socket; transfer_socket = socket(AF_INET, SOCK_STREAM, 0); if(transfer_socket == -1){ perror("Transfer socket creation failed\n"); return; } memset(&transfer_addr, 0, sizeof(transfer_addr)); transfer_addr.sin_family = AF_INET; transfer_addr.sin_addr.s_addr = inet_addr("192.168.2.4"); transfer_addr.sin_port = htons(555); if(connect(transfer_socket, (struct sockaddr*)&transfer_addr, sizeof(transfer_addr)) < 0){ perror("Transfer connection failed\n"); close(transfer_socket); return; } file_fd = open(filename, O_RDONLY); if(file_fd == -1) { perror("file not found\n"); close(transfer_socket); return; } while((bytes_read = read(file_fd, buffer, BUFFER_SIZE)) > 0) { send(transfer_socket, buffer, bytes_read, 0); } close(file_fd); close(transfer_socket); printf("File %s transferred\n", filename); return; }
Editor is loading...
Leave a Comment