crescentpclient
unknown
plain_text
8 months ago
2.5 kB
3
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