Reporte de laboratorio de redes

Páginas: 12 (2880 palabras) Publicado: 5 de abril de 2011
Redes de Telecomunicaciones Practica de laboratorio 3 Soto Hernández Christian
Objetivo Implementar un proceso cliente/servidor en una red virtual usando netkit. Teoría Para que un proceso pueda comunicarse con otro ya sea en la misma computadora o en una que este conectada a la red, es necesario crear un canal de comunicaciones y establecer un protocolo. Afortunadamente ya existe una libreríaque permite hacer todo sin tener que preocuparse del uso del hardware, es la librería “socket.h” dentro de esta se encuentra lo necesario para realizar comunicaciones entre procesos a través de red usando el protocolo TCP. Procedimiento Primero hay que crear los procesos servidor y cliente en C. Comenzamos con el código de servidor: /* A simple echo server using TCP */ #include #include #include#include #include #define SERVER_TCP_PORT 3000 /* well-known port */ #define BUFLEN 256 /* buffer length */ int main(int argc, char **argv) { int n, bytes_to_read; int sd, new_sd, client_len, port; struct sockaddr_in server, client; char *bp, buf[BUFLEN]; switch(argc) { case 1: port = SERVER_TCP_PORT; break; case 2: port = atoi(argv[1]); break; default: fprintf(stderr, "Usage: %s [port]\n",argv[0]); return(0); } /* Create a stream socket */ if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { fprintf(stderr, "Can’t create a socket\n");

return(1); } /* Bind an address to the socket */ bzero((char *)&server, sizeof(struct sockaddr_in)); server.sin_family = AF_INET; server.sin_port = htons(port); server.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(sd, (struct sockaddr *)&server,sizeof(server)) == -1) { fprintf(stderr, "Can’t bind name to socket\n"); return(1); } /* queue up to 5 connect requests */ listen(sd, 5); while (1) { client_len = sizeof(client); if ((new_sd = accept(sd, (struct sockaddr *) &client, &client_len)) == -1) { fprintf(stderr, "Can’t accept client\n"); return(1); } bp = buf; bytes_to_read = BUFLEN; while ((n = read(new_sd, bp, bytes_to_read)) > 0) { bp += n;bytes_to_read -= n; } write(new_sd, buf, BUFLEN); close(new_sd); } close(sd); return(0); } Revisando el código por partes tenemos que: #include #include #include #include #include #define SERVER_TCP_PORT 3000 /* well-known port */ #define BUFLEN 256 /* buffer length */ Se requieren todas las librerías anteriores para el correcto funcionamiento del programa, además se han definido 2constantes, la primera corresponde al puerto por default del servidor, y la segunda

corresponde a la longitud del mensaje recibido. int main(int argc, char **argv) { int n, bytes_to_read; int sd, new_sd, client_len, port; struct sockaddr_in server, client; char *bp, buf[BUFLEN]; switch(argc) { case 1: port = SERVER_TCP_PORT; break; case 2: port = atoi(argv[1]); break; default: fprintf(stderr, "Usage:%s [port]\n", argv[0]); return(0); } Además de preparar la variables necesarias para realizar la comunicación, esta es la parte del código que permite que el servidor utilice un puerto diferente, ya que se analiza el comando de invocación, si se llama de la forma “./servidor” utilizara el puerto que tiene asignado por default, pero si se llama de la forma “./servidor num_port” se utilizara elpuerto designado por num_port; para cualquier otro caso imprime un error. if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { fprintf(stderr, "Can’t create a socket\n"); return(1); } Aqui se crea el “socket” es decir un extremo del canal de comunicaciones, requiere 3 parámetros: 1. AF_INET si el cliente corre en otra PC, si el cliente corre en la misma maquina se usa AF_UNIX. 2. SOCK_STREAM si sequiere una comunicación orientada a conexión, es decir que es de importancia el acuerdo de enviar y recibir información, SOCK_DGRAM si se quiere una comunicación no orientada a conexión, es decir, cualquiera puede enviar un mensaje sin importar si el receptor quiere tomarlo. 3. El tercer parámetro es el protocolo, normalmente se pone 0. La función regresa un entero, si el entero es -1, entonces hubo...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Reporte De Laboratorio
  • reporte de laboratorio
  • reporte de laboratorio
  • Reporte de laboratorio
  • reporte laboratorio
  • REPORTE DE LABORATORIO No
  • Reporte De Laboratorio
  • reporte de laboratorio

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS