Está en la página 1de 2

Código en lenguaje C.

ALUMNO: PINEDA CRUZ BRANDON


GRUPO: 8CM12
PRACTICA 4: "Invocación de procedimientos remotos"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT 5000

#define BUFFER_SIZE 1024

typedef struct {
char nombre[BUFFER_SIZE];
int edad;
} ObjetoRemoto;

void servidor(int socket) {


ObjetoRemoto objetoremot;

// **Línea 1:** Incluye las bibliotecas necesarias para el programa.

// **Línea 2:** Define una constante para el puerto del servidor.

// **Línea 3:** Define una constante para el tamaño del búfer.

// **Línea 4:** Define una estructura para representar un objeto remoto.

// **Línea 6:** Declara la función `servidor()`, que se encargará de procesar


las conexiones entrantes.

// **Línea 8:** Declara la variable `objetoremot`, que se utilizará para


almacenar el objeto remoto recibido del cliente.

// **Línea 11:** Recibe un objeto remoto del cliente.


recv(socket, &objetoremot, sizeof(objetoremot), 0);

// **Línea 14:** Invoca el procedimiento remoto.


saludar(objetoremot);

// **Línea 17:** Envia un mensaje al cliente.


send(socket, objetoremot.saludar(), strlen(objetoremot.saludar()), 0);

// **Línea 20:** Cerrar la conexión.


close(socket);
}

void cliente(int socket) {


ObjetoRemoto objetoremot;

// **Línea 23:** Envia un objeto remoto al servidor.


objetoremot.nombre = "Bard";
objetoremot.edad = 20;
send(socket, &objetoremot, sizeof(objetoremot), 0);
// **Línea 28:** Recibe un mensaje del servidor.
char message[BUFFER_SIZE];
recv(socket, message, sizeof(message), 0);

// **Línea 31:** Imprimir el mensaje recibido.


printf("%s\n", message);

// **Línea 33:** Cerrar la conexión.


close(socket);
}

void saludar(ObjetoRemoto *objetoremot) {


// **Línea 36:** Modifica el objeto remoto.
objetoremot->nombre = "Hola, soy Bard!";
}

int main() {
// **Línea 39:** Creación del socket del servidor.
int server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket < 0) {
perror("Error al crear el socket del servidor");
return 1;
}

// **Línea 42:** Configuración de la dirección del servidor.


struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(PORT);
server_address.sin_addr.s_addr = INADDR_ANY;

// **Línea 47:** Vinculación del socket del servidor a una dirección.


if (bind(server_socket, (struct sockaddr *)&server_address,
sizeof(server_address)) < 0) {
perror("Error al vincular el socket del servidor");
return 1;
}

// **Línea 50:** Escucha de conexiones entrantes.


listen(server_socket, 1);

// **Línea 53:** Aceptación de una conexión entrante.


int client_socket = accept(server_socket, NULL, NULL);
if (client_socket < 0) {
perror("Error al aceptar una conexión");
return 1;
}

// **Línea 56:** Llamada al servidor.


servidor(client_socket);

// Cierre de la conexión
close(server_socket);

return 0;
}

También podría gustarte