programacion con sockets tcp.desbloqueado.pdf

Upload: felix-enrique-huaman-ataulluco

Post on 02-Mar-2016

32 views

Category:

Documents


2 download

TRANSCRIPT

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 1 de 22

    I. TEMA: PROGRAMACION CON SOCKETS TCP

    II. OBJETIVOS

    Al finalizar la presente prctica el estudiante:

    1. Comprende y explica la comunicacin mediante sockets TCP. 2. Escribe aplicaciones de red para Windows y Linux que utilizan sockets TCP para

    comunicarse entre s

    III. TRABAJO PRELIMINAR

    Para el presente laboratorio, es necesario que el estudiante est familiarizado con conceptos y habilidades tales como:

    1. Conceptos tericos de sockets TCP 2. Manejo de la plataforma Linux 3. Programacin en C para Linux 4. Programacin en C para Windows

    IV. MATERIALES Y EQUIPOS.

    Los materiales que utilizaremos en los trabajos de laboratorio son:

    1. Sistema operativo Linux con compilador para el lenguaje de programacin C. 2. Sistema operativo Windows con compilador para el lenguaje de programacin C. 3. Manuales de programacin en C para Linux. 4. Manuales de programacin en C para Windows. 5. Manuales de programacin con sockets en Linux.

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 2 de 22

    V. MARCO TEORICO.

    SOCKETS

    En el presente trabajo de laboratorio se implementar aplicaciones que proporcionen servicios de red utilizando sockets TCP y el lenguaje de programacin C en los entornos Linux y Windows. La documentacin relacionada con el uso de sockets TCP se adjunta en archivo digital proporcionado por el docente, que tambin puede ser accedida en Internet en las referencias web indicadas en la bibliografa.

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 3 de 22

    VI. PRACTICAS DE LABORATORIO.

    1. Escribir una aplicacin Cliente/Servidor, en la que el cliente enva un mensaje de una palabra al servidor y este responde con el mismo mensaje, que debe ser mostrado por el cliente. Implemente el servidor en Linux y en Windows.

    Solucin

    La aplicacin se escribir en dos partes: una que cumplir la funcin de servidor (una aplicacin por sistema operativo) y otra la de cliente. Para las pruebas, la aplicacin cliente se ejecutar en un equipo y la aplicacin servidor en otro equipo. Excepcionalmente se probarn ambos programas en un solo equipo.

    CODIGO DEL SERVIDOR LINUX

    // Nombre : Servidor // Proposito : Recibe un mensaje y lo envia de vuelta al cliente // Autor : Edwin Carrasco (Adaptado de [1]) // FCreacion : -- // FModific. : 24/04/2009 // Compilacion : gcc -o Servidor Servidor.c

    #include #include #include #include #include #include #include

    #define MAXPENDING 5 /* Nro maximo de conexiones */ #define BUFFSIZE 32

    void AvisarError(char *mensaje) { perror(mensaje); exit(1); }

    void AtenderCliente(int sock) {

    // Variables char buffer[BUFFSIZE]; int received = -1;

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 4 de 22

    // Recibir mensaje if ((received = recv(sock, buffer, BUFFSIZE, 0)) < 0) { AvisarError("No se pudo recibir bytes iniciales del cliente"); }

    // Envia bytes y verifica mas datos entrantes while (received > 0) { // Enviar de vuelta los datos recibidos if (send(sock, buffer, received, 0) != received) { AvisarError("No se pudo enviar bytes al cliente"); }

    // Verificar mas datos if ((received = recv(sock, buffer, BUFFSIZE, 0)) < 0) { AvisarError("No se pudo recibir bytes adicionales del cliente"); } }

    close(sock); }

    int main(int argc, char *argv[]) { int serversock, clientsock; struct sockaddr_in echoserver, echoclient;

    if (argc != 2) { fprintf(stderr, "USO: servidor \n"); exit(1); }

    // Crear un socket TCP if ((serversock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { AvisarError("No se pudo crear socket"); }

    /* Construir la estructura sockaddr_in del servidor */

    // Limpiar la estructura memset(&echoserver, 0, sizeof(echoserver));

    // Protocolo Internet/IP echoserver.sin_family = AF_INET;

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 5 de 22

    // Direccion de ingreso echoserver.sin_addr.s_addr = htonl(INADDR_ANY);

    // Puerto en que escucha el servidor echoserver.sin_port = htons(atoi(argv[1]));

    // Enlazar el socket del servidor if (bind(serversock, (struct sockaddr *) &echoserver, sizeof(echoserver)) < 0) { AvisarError("No se pudo enlazar el socket de servidor"); }

    // Escuchar en el socket del servidor if (listen(serversock, MAXPENDING) < 0) { AvisarError("No se pudo escuchar en el socket del servidor"); }

    // Ejecutar hasta que se cancele while (1) { unsigned int clientlen = sizeof(echoclient);

    // Esperar conexion de cliente if ((clientsock=accept(serversock,(struct sockaddr *) &echoclient, &clientlen)) < 0 ) { AvisarError("No se pudo aceptar conexion de cliente"); }

    fprintf(stdout, "Cliente conectado: %s\n", inet_ntoa(echoclient.sin_addr)); AtenderCliente(clientsock); } }

    CODIGO DEL CLIENTE LINUX

    // Nombre : Cliente // Proposito : Envia un mensaje y muestra el mensaje devuelto por el servidor // Autor : Edwin Carrasco (Adaptado de [1]) // FCreacion : -- // FModific. : -- // Compilacion : gcc -o Cliente Cliente.c

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 6 de 22

    #include #include #include #include #include #include #include

    #define BUFFSIZE 32

    void AvisarError(char *mensaje) { perror(mensaje); exit(1); }

    int main(int argc, char *argv[]) {

    // Variables int sock; struct sockaddr_in echoserver; char buffer[BUFFSIZE]; unsigned int echolen; int received = 0;

    // Verificar argumentos necesarios para correr programa if (argc != 4) { fprintf(stderr, "USO: Cliente \n"); exit(1); }

    // Crear el socket TCP if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP))< 0) { AvisarError("No se pudo crear socket"); }

    /* Construir la estructura sockaddr_in del servidor */ // Limpiar la estructura memset(&echoserver, 0, sizeof(echoserver));

    // Protocolo de Internet/IP echoserver.sin_family = AF_INET;

    // Direccion IP echoserver.sin_addr.s_addr = inet_addr(argv[1]);

    // Puerto del servidor echoserver.sin_port=htons(atoi(argv[3]));

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 7 de 22

    // Establecer la conexion if (connect(sock,(struct sockaddr *) &echoserver, sizeof(echoserver)) < 0 ) { AvisarError("No se pudo conectar al servidor"); }

    // Enviar en mensaje al servidor echolen = strlen(argv[2]); if (send(sock, argv[2], echolen, 0) != echolen) { AvisarError("Inconsistencia en el numero de bytes enviados"); }

    // Recibir el mensaje de vuelta desde el servidor fprintf(stdout, "Recibido: ");

    while (received < echolen) { int bytes = 0; if ((bytes = recv(sock, buffer, BUFFSIZE-1, 0)) < 1) { AvisarError("No se pudo recibir bytes desde el servidor"); }

    received += bytes; buffer[bytes]='\0'; // Cerciorarse que la cadena termine en \0 fprintf(stdout, buffer); }

    fprintf(stdout, "\n"); close(sock); exit(0); }

    EJECUCION DE LAS APLICACIONES

    Para verificar que la aplicacin funcione correctamente, ejecutamos el lado servidor y el lado cliente, respetando los argumentos con lo que se debe ejecutar cada uno de ellos.

    Como puede verse en la siguiente figura, la ejecucin del cliente requiere de un argumento: el nmero de puerto en el que el servidor esperar las peticiones de conexin de los clientes.

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 8 de 22

    Por cada conexin entrante, el servidor muestra la direccin IP del cliente.

    Por su parte el lado cliente requiere tres argumentos: la direccin IP del servidor, el mensaje que se enviar al servidor y el puerto en el cual el servidor escucha las peticiones de conexin.

    Si no se conoce la direccin IP del servidor o el puerto en el cual ste escucha, no ser posible que las aplicaciones se comuniquen.

    Como puede verse en la figura, el cliente enva una palabra como mensaje y el servidor devuelve la misma. Al recibir el mensaje de vuelta, este es mostrado por la consola por el cliente:

    CODIGO DEL SERVIDOR WINDOWS

    // Nombre : serv_tcp // Proposito : Recibe un mensaje y lo envia de vuelta al cliente // Autor : Edwin Carrasco (Adaptado de [1]) // FCreacion : 08/07/2013 // FModific. : ---

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 9 de 22

    #include #include #include

    #pragma comment (lib, "Ws2_32.lib")

    #define MAXPENDING 5 /* Numero maximo de conexiones */ #define BUFFSIZE 32

    void AvisarError(char *mensaje) { perror(mensaje); exit(1); }

    void AtenderCliente(int sock) { //Variables char buffer[BUFFSIZE]; int received = -1;

    // Recibir mensaje if ((received = recv(sock, buffer, BUFFSIZE, 0)) < 0) { AvisarError("No se pudo recibir bytes iniciales del cliente"); }

    // Envia bytes y verifica mas datos entrantes while (received > 0) { // Enviar de vuelta los datos recibidos if (send(sock, buffer, received, 0) != received) { AvisarError("No se pudo enviar bytes al cliente"); }

    // Verificar mas datos if ((received =recv(sock, buffer, BUFFSIZE, 0))

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 10 de 22

    int main(int argc, char *argv[]) { //Variables int serversock, clientsock; struct sockaddr_in echoserver, echoclient; WSADATA wsaData;

    //Verificar parametros requeridos if (argc != 2) { fprintf(stderr, "USO: servidor \n"); exit(1); }

    //Cargar Winsock 2.0 dll if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) { fprintf(stderr, "WSAStartup() failed"); exit(1); }

    // Crear un socket TCP if ((serversock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { AvisarError("No se pudo crear socket"); }

    /* Construir la estructura sockaddr_in del servidor */

    // Limpiar la estructura memset(&echoserver, 0, sizeof(echoserver));

    // Familia de protocolos: Internet/IP echoserver.sin_family = AF_INET;

    // Direccion de ingreso echoserver.sin_addr.s_addr = htonl(INADDR_ANY);

    // Puerto en el que escucha el servidor echoserver.sin_port = htons(atoi(argv[1]));

    // Enlazar el socket del servidor if (bind(serversock, (struct sockaddr *) &echoserver, sizeof(echoserver)) < 0) { AvisarError("No se pudo enlazar el socket de servidor"); }

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 11 de 22

    // Escuchar en el socket del servidor if (listen(serversock, MAXPENDING) < 0) { AvisarError("No se pudo escuchar en el socket del servidor"); }

    // Ejecutar hasta que se cancele while (1) { int clientlen = sizeof(echoclient);

    // Esperar conexion de cliente if ((clientsock = accept(serversock,(struct sockaddr *)&echoclient, &clientlen)) < 0 ) { AvisarError("No se pudo aceptar conexion de cliente"); }

    fprintf(stdout, "Cliente conectado: %s\n", inet_ntoa(echoclient.sin_addr));

    AtenderCliente(clientsock); }

    //Cerrar socket closesocket(serversock); WSACleanup(); return 0; }

    EJECUCION DE LAS APLICACIONES

    Para verificar que la aplicacin funcione correctamente, ejecutamos el lado servidor en Windows y el lado cliente en el equipo Linux, debiendo mostrarse un resultado similar al que se muestra en la siguiente figura:

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 12 de 22

    2. Escriba una aplicacin Cliente/Servidor en la que el servidor responde a las peticiones de conexin enviando al cliente la fecha y hora en el servidor. El cliente debe mostrar por consola los datos devueltos por el servidor. El servidor debe funcionar en Linux y los clientes en Windows y Linux

    Solucin

    CODIGO DEL SERVIDOR LINUX

    // Nombre : ServidorHora // Proposito : Envia la hora del sistema al conectarse un cliente // Autor : Edwin Carrasco // FCreacion : 03/06/2009 // FModificacion : 08/07/2013 // Compilacion : gcc -o ServidorHora ServidorHora.c

    #include #include #include #include #include #include #include #include

    #define MAXPENDING 5 // Maximo nro de conexiones admitidas #define BUFFSIZE 25

    void AvisarError(char *mensaje) { perror(mensaje); exit(1); }

    void AtenderCliente(int sock) { char buffer[BUFFSIZE]; time_t t; struct tm *tm;

    /* Tomar la fecha y hora del sistema */ t = time(NULL); tm = localtime(&t);

    /* copiar fecha y hora al buffer */ strcpy(buffer,asctime(tm)); unsigned msgLen = strlen(asctime(tm));

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 13 de 22

    /* enviar los datos al cliente */ if (send(sock, buffer, msgLen, 0) != msgLen) { AvisarError("No se pudo enviar bytes al cliente"); } close(sock); }

    int main(int argc, char *argv[]) {

    int socketServidor; int socketCliente; struct sockaddr_in timeServer; struct sockaddr_in timeClient;

    if (argc != 2) { fprintf(stderr, "USO: ServidorHora \n"); exit(1); }

    /* Crear un socket TCP */ if ((socketServidor = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { AvisarError("No se pudo crear socket"); }

    /* Construir la estructura sockaddr_in del servidor */

    // Limpiar la estructura memset(&timeServer, 0, sizeof(timeServer));

    // Protocolo Internet/IP timeServer.sin_family = AF_INET;

    // Direccion de ingreso timeServer.sin_addr.s_addr = htonl(INADDR_ANY);

    // Puerto del servidor timeServer.sin_port = htons(atoi(argv[1]));

    /* Enlazar el socket del servidor*/ if (bind(socketServidor, (struct sockaddr *) &timeServer, sizeof(timeServer)) < 0) { AvisarError("No se pudo enlazar el socket de servidor"); }

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 14 de 22

    /* Escuchar en el socket del servidor */ if (listen(socketServidor, MAXPENDING) < 0) { AvisarError("No se pudo escuchar en el socket del servidor"); }

    /* Ejecutar hasta que se cancele */ while (1) { unsigned int clientlen = sizeof(timeClient);

    /* Esperar conexion de cliente */ if ((socketCliente=accept(socketServidor,(struct sockaddr *) &timeClient, &clientlen))< 0 ) { AvisarError("No se pudo aceptar conexion de cliente"); }

    fprintf(stdout, "Cliente conectado: %s\n", inet_ntoa(timeClient.sin_addr));

    AtenderCliente(socketCliente); } }

    CODIGO DEL CLIENTE LINUX

    // Nombre : Cliente // Proposito : Se conecta al servidor y muestra la fecha y hora que recibe en rpta // Autor : Edwin Carrasco // FCreacion : 03/06/2009 // FModificacion : 17/06/2009 // Compilacion : gcc -o Cliente Cliente.c

    #include #include #include #include #include #include #include

    #define BUFFSIZE 25

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 15 de 22

    void AvisarError(char *mensaje) { perror(mensaje); exit(1); }

    int main(int argc, char *argv[]) { int sock; struct sockaddr_in timeServer; char buffer[BUFFSIZE]; int bytesRecibidos = 0;

    if (argc != 3) { fprintf(stderr, "USO: Cliente \n"); exit(1); }

    /* Crear el socket TCP */ if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { AvisarError("No se pudo crear socket"); }

    /* Construir la estructura sockaddr_in del servidor */

    // Limpiar la estructura memset(&timeServer, 0, sizeof(timeServer));

    // Protocolo Internet/IP timeServer.sin_family = AF_INET;

    //Direccion IP timeServer.sin_addr.s_addr = inet_addr(argv[1]);

    // Puerto de escucha del servidor timeServer.sin_port = htons(atoi(argv[2]));

    /* Establecer la conexion */ if (connect(sock,(struct sockaddr *) &timeServer, sizeof(timeServer)) < 0 ) { AvisarError("No se pudo conectar al servidor"); }

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 16 de 22

    /* Recibir el mensaje de vuelta desde el servidor */ fprintf(stdout,"\nConectado. Fecha y hora en el servidor:");

    if ((bytesRecibidos = recv(sock, buffer, BUFFSIZE, 0)) < 1) { AvisarError("No se pudo recibir bytes desde el servidor"); }

    fprintf(stdout, buffer); fprintf(stdout, "\n");

    close(sock); exit(0); }

    EJECUCION DE LAS APLICACIONES

    En el lado del servidor:

    En el lado del cliente:

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 17 de 22

    CODIGO DEL CLIENTE EN WINDOWS

    // Nombre : time_client // Proposito : Se conecta al servidor y muestra la fecha y hora que recibe como respuesta // Autor : Edwin Carrasco // FCreacion : 08/07/2013 // FModific. : ---

    #include #include #include

    #pragma comment (lib, "Ws2_32.lib")

    #define BUFFSIZE 25

    void AvisarError(char *mensaje) { perror(mensaje); exit(1); }

    int main(int argc, char *argv[]) {

    //Variables int sock; struct sockaddr_in timeServer; char buffer[BUFFSIZE]; int bytesRecibidos = 0; WSADATA wsaData;

    //Verificar argumentos que el programa requiere if (argc != 3) { fprintf(stderr, "USO: time_client \n"); exit(1); }

    //Cargar Winsock 2.0 dll if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) { fprintf(stderr, "WSAStartup() failed"); exit(1); }

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 18 de 22

    /* Crear el socket TCP */ if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { AvisarError("No se pudo crear socket"); }

    /* Construir la estructura sockaddr_in del servidor */

    // Limpiar la estructura memset(&timeServer, 0, sizeof(timeServer));

    // Internet/IP timeServer.sin_family = AF_INET;

    // Direccion IP timeServer.sin_addr.s_addr = inet_addr(argv[1]);

    // puerto del servidor timeServer.sin_port = htons(atoi(argv[2]));

    /* Establecer la conexion */ if (connect(sock,(struct sockaddr *) &timeServer, sizeof(timeServer)) < 0 ) { AvisarError("No se pudo conectar al servidor"); }

    /* Recibir el mensaje de vuelta desde el servidor */ fprintf(stdout,"\nConectado. Fecha y hora en el servidor:");

    if ((bytesRecibidos = recv(sock, buffer, BUFFSIZE, 0)) < 1) { AvisarError("No se pudo recibir bytes desde el servidor"); }

    fprintf(stdout, buffer); fprintf(stdout, "\n");

    closesocket(sock); WSACleanup(); return 0;

    }

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 19 de 22

    EJECUCION DE LAS APLICACIONES CLIENTE Y SERVIDOR

    En la figura se muestra el resultado de ejecutar los programas:

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 20 de 22

    VII. TRABAJOS DE LABORATORIO.

    1. Escriba un programa cliente/servidor, en el que el cliente enve una cadena al servidor y este devuelva la cadena en maysculas. La cadena recibida por el cliente debe ser mostrada en la consola. El cliente se implementa en Linux y el Servidor en Windows.

    2. Escriba un programa cliente/servidor, en el que el cliente enve un arreglo de enteros al servidor y este devuelva el promedio de los mismos. El cliente debe mostrar el cuadrado del promedio por consola. El cliente se implementa en Windows y el Servidor en Linux.

    3. Escriba un programa que devuelva la lista de archivos del directorio de trabajo del servidor. Tambin debe escribirse el programa cliente correspondiente, que muestre el listado en pantalla. El cliente se implementa en Linux y el Servidor en Windows.

    4. Escriba un programa servidor que reciba una cadena de una aplicacin cliente y devuelva la misma despus de encriptarla mediante cualquier tcnica de encriptacin. La aplicacin cliente debe desencriptar la cadena recibida del servidor (Nota. La aplicacin cliente no debe implementar la funcin de encriptacin). El cliente se implementa en Windows y el Servidor en Linux.

    5. Escriba un programa servidor que permita descargar un archivo del directorio de trabajo del servidor. Tambin debe escribirse el programa cliente correspondiente. La solucin debe comprender un cliente en Windows, otro en Linux y el servidor en Linux.

    6. Utilizando Wireshark, muestre los encabezados de los segmentos intercambiados entre las aplicaciones cliente y servidor de los ejercicios que resuelva. Para cada caso indique:

    a. Las direcciones IP del emisor y receptor b. El nmero de los puertos utilizados en el emisor y el receptor c. El tamao de la ventana de congestionamiento d. El tamao de la ventana de recepcin

    Represente la secuencia de segmentos intercambiados entre el emisor y el receptor mediante un diagrama que exprese la temporalidad de cada evento (incluyendo el proceso de handshaking y el cierre de la conexin).

    Los ejercicios resueltos deben ser entregados al Docente en un medio digital.

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 21 de 22

    VIII. BIBLIOGRAFIA

    LIBROS

    1. Lopez , Novo; Protocolos De Internet Ed. AlfaOmega 2. Comer Internetworking With Tcp/Ip Volumen 1. Ed. Prentice Hall 4 edicin. 3. Comer Internetworking With Tcp/Ip Volumen 2. Ed. Prentice Hall 3 edicin. 4. Hall et. al. Windows Sockets. An Open Interface For Network Programming

    Under Microsoft Windows Version 1.1 1993. 5. Jones et. al. Network Programming For Microsoft Windows Microsoft

    Corporation 2002, 2 edicin.

    REFERENCIAS WEB

    1. http://www.beej.us/guide/bgnet/ (F. V. 24/06/2013) 2. http://www.linuxhowtos.org/C_C++/socket.htm (F. V. 24/06/2013) 3. Microsoft. Directorios De Vc++ (Pgina De Propiedades)

    http://msdn.microsoft.com/es-es/library/vstudio/ee855621(v=vs.110).aspx (F. V. 24/06/2013)

    4. Microsoft. Winsock Reference. http://msdn.microsoft.com/en-us/library/windows/desktop/ms741416%28v=vs.85%29.aspx (F. V. 24/06/2013)

    5. Tenouk. C, Winsok2 and Visual Studio 2008 (VC++) Professional Edition: The How-to Build Guide Part 1 http://www.tenouk.com/Winsock/visualstudio2008ncnwinsock2.html 2012. (F. V. 24/06/2013)

    6. Tenouk. C, Winsok2 and Visual Studio 2008 (VC++) Professional Edition:. The How-to Build Guide Part 2 http://www.tenouk.com/Winsock/visualstudio2008ncnwinsock2a.html. 2012 (F. V. 24/06/2013)

    7. winsocketdotnetworkprogramming.com. Tutorials on Advanced winsock 2 Network Programming http://www.winsocketdotnetworkprogramming.com/winsock2programming/ (F. V. 24/06/2013)

  • UNIVERSIDAD ANDINA DEL CUSCO TECNOLOGIAS DE COMUNICACION

    GUIA DE LABORATORIO ECP 22 de 22

    IX. TABLA DE EVALUACION

    La evaluacin de las actividades realizadas en la presente gua de prctica se har en funcin de la siguiente tabla:

    ACTIVIDAD SESION 01 SESION 02 Procedimental Procedimental Ejecucin del ejercicio de ejemplo 20 -- Resolucin del ejercicio propuesto 01 -- 03 Resolucin del ejercicio propuesto 02 -- 03 Resolucin del ejercicio propuesto 03 -- 03 Resolucin del ejercicio propuesto 04 -- 03 Resolucin del ejercicio propuesto 05 -- 04 Resolucin del ejercicio propuesto 06 -- 04

    TOTAL 20 20