crescentpclient
unknown
plain_text
15 days ago
2.5 kB
2
Indexable
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> #define BUFFER_SIZE 256 #define MAX_FILENAME_LENGTH 256s void receive_file(const char* filename); int main(){ int sock = 0; struct sockaddr_in serv_addr; char buffer[BUFFER_SIZE] = {0}; if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("Socket creation failed\n"); return -1; } memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(444); if(inet_pton(AF_INET, "192.168.2.2", &serv_addr.sin_addr) <= 0) { printf("Invalid address\n"); return -1; } if(connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0){ printf("Connection failed\n"); return -1; } while(1){ printf("TO send a message or Send FILENAME1, FILENAME2, .... : \n"); fgets(buffer, BUFFER_SIZE, stdin); buffer[strcspn(buffer, "\n")] = 0; send(sock, buffer, strlen(buffer), 0); printf("Message Sent\n"); if(strncmp(buffer, "Send ", 5) == 0){ char* token = strtok(buffer + 5, ","); while(token != NULL){ receive_file(token); token = strtok(NULL, ","); } } } return 0; } void receive_file(const char* filename){ int server_fd, new_socket; struct sockaddr_in address; int opt = 1; int addrlen = sizeof(address); char buffer[BUFFER_SIZE] = {0}; if((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("setsockopt"); exit(EXIT_FAILURE); } address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(555); if(bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) { perror("bind failed"); exit(EXIT_FAILURE); } if(listen(server_fd, 3) < 0){ perror("listen"); exit(EXIT_FAILURE); } if((new_socket = accept(server_fd, (struct sockaddr*)&address, (socklen_t*)&addrlen)) < 0) { perror("accept"); exit(EXIT_FAILURE); } int file_fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644); if(file_fd == -1){ perror("failed to create file\n"); close(new_socket); close(server_fd); exit(EXIT_FAILURE); return; } int bytes_received = 0; while((bytes_received = read(new_socket, buffer, BUFFER_SIZE)) > 0) { write(file_fd, buffer, bytes_received); } close(file_fd); close(new_socket); close(server_fd); printf("File %s received\n", filename); }
Editor is loading...
Leave a Comment