Untitled

 avatar
unknown
plain_text
5 months ago
2.0 kB
3
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define SERVER_PORT 8080
#define BUFFER_SIZE 1024
#define FILE_TO_SEND "test.txt"


int main(void) 
{
    int sockfd;
    struct sockaddr_in server_addr;
    struct sockaddr_storage client_addr;
    socklen_t client_addr_len = sizeof(client_addr);

    // Create socket
    sockfd = socket(AF_INET, SOCK_STREAM, 0);

    if (sockfd < 0)
    {
        perror("Could not create socket");
        exit(EXIT_FAILURE);
    }
    int yes = 1;
    setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes));

    // Initialize and configure
    memset(&server_addr, 0, sizeof(server_addr));
    memset(&client_addr, 0, sizeof(client_addr));

    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;
    server_addr.sin_port = htons(SERVER_PORT);

    // Bind the socket to the server address
    int err = bind(sockfd, (const struct sockaddr *)&server_addr, 
        sizeof(server_addr));
    if (0 > err)
    {
        perror("Bind failed.");
        close(sockfd);
        exit(EXIT_FAILURE);
    }
    printf("Server is running on port %d...\n", SERVER_PORT);

    // Listen
    err = listen(sockfd, 5);
    if (0 > err)
    {
        perror("Listening failed.");
        close(sockfd);
        exit(EXIT_FAILURE);
    }

    // Begin communicating
    int remote_fd = accept(sockfd, (struct sockaddr*)&client_addr, 
        &client_addr_len);
    char addr[INET6_ADDRSTRLEN];

    char buffer[BUFFER_SIZE] = {0};

    ssize_t received = recv(remote_fd, buffer, sizeof(buffer) - 1, 0);
    if (0 == strcmp(buffer, "test.txt")) 
    {
        uint32_t p_size = 46;
        p_size = htonl (p_size);
        const char * p_response = "Congrats! You successfully transferred a file.\n";
        err = send(remote_fd, &p_size, sizeof(p_size), 0);
        err = send(remote_fd, p_response, strlen(p_response), 0);
    }

    close(sockfd);
}
Editor is loading...
Leave a Comment