crescentpclient

 avatar
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