Servidor basico en lenguaje C - parte 1

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <signal.h>

#define PORT 8080
#define BUFFER_SIZE 1024

int server_fd;
int running = 1;

// Manejo de señal para detener el servidor
void handle_sigint(int sig) {
    printf("\nServidor detenido.\n");
    if (server_fd) {
        close(server_fd);
    }
    exit(0);
}

void start_server() {
    int new_socket;
    struct sockaddr_in address;
    int addrlen = sizeof(address);
    char buffer[BUFFER_SIZE] = {0};
    const char *message = "Hello from the C server!\n";

    // Crear socket
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("Socket failed");
        exit(EXIT_FAILURE);
    }

    // Configurar dirección
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(PORT);

    // Asociar socket con dirección
    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
        perror("Bind failed");
        exit(EXIT_FAILURE);
    }

    // Escuchar conexiones
    if (listen(server_fd, 3) < 0) {
        perror("Listen failed");
        exit(EXIT_FAILURE);
    }

    printf("Servidor en ejecución en el puerto %d\n", PORT);
    printf("\n       Nota: Presione (Ctrl + C) para deterner el Servidor \n");
    // Aceptar conexiones
    while (running && (new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) >= 0) {
        read(new_socket, buffer, BUFFER_SIZE);
        send(new_socket, message, strlen(message), 0);
        close(new_socket);
    }
}

int main() {
    int choice;

    // Configurar manejo de señal
    signal(SIGINT, handle_sigint);

    while (1) {
        printf("\n--- Menú del servidor ---\n");
        printf("1. Iniciar servidor\n");
        printf("2. Detener servidor\n");
        printf("Seleccione una opción: ");
        scanf("%d", &choice);

        if (choice == 1) {
            printf("Iniciando servidor...\n");
            start_server();
        } else if (choice == 2) {
            printf("Servidor detenido manualmente.\n");
            running = 0;
            if (server_fd) {
                close(server_fd);
            }
            break;
        } else {
            printf("Opción no válida. Intente nuevamente.\n");
        }
    }

    return 0;
}

 

 

 

 

 

 

 

Destacado

Bootloader Avanzado en Ensamblador

Bootloader Avanzado en Ensamblador Características del Bootloader Se carga en la dirección 0x7C00 (BIOS). ...