You are on page 1of 22

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.
2.

Comprende y explica la comunicacin mediante sockets TCP.


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.
2.
3.
4.

Conceptos tericos de sockets TCP


Manejo de la plataforma Linux
Programacin en C para Linux
Programacin en C para Windows

IV. MATERIALES Y EQUIPOS.


Los materiales que utilizaremos en los trabajos de laboratorio son:
1.
2.
3.
4.
5.

Sistema operativo Linux con compilador para el lenguaje de programacin C.


Sistema operativo Windows con compilador para el lenguaje de programacin C.
Manuales de programacin en C para Linux.
Manuales de programacin en C para Windows.
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
// Proposito
//
//
//
//

: Servidor
: 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

<stdio.h>
<sys/socket.h>
<arpa/inet.h>
<stdlib.h>
<string.h>
<unistd.h>
<netinet/in.h>

#define MAXPENDING 5
#define BUFFSIZE 32

/* Nro maximo de conexiones */

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 <puerto>\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
// Proposito
//
//
//
//

: Cliente
: 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

<stdio.h>
<sys/socket.h>
<arpa/inet.h>
<stdlib.h>
<string.h>
<unistd.h>
<netinet/in.h>

#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 <ip de servidor>
<mensaje> <puerto>\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
// Proposito
// Autor
// FCreacion
// FModific.

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

UNIVERSIDAD ANDINA DEL CUSCO


TECNOLOGIAS DE COMUNICACION
GUIA DE LABORATORIO
ECP 9 de 22

#include <stdio.h>
#include <winsock.h>
#include <stdlib.h>
#pragma comment (lib, "Ws2_32.lib")

#define MAXPENDING 5
#define BUFFSIZE 32

/* Numero maximo de conexiones */

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))<0)
{
AvisarError("No se pudo recibir bytes
adicionales del cliente");
}
}
//Cerrar socket
closesocket(sock);
}

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 <puerto>\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
// Proposito

: ServidorHora
: 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

<stdio.h>
<sys/socket.h>
<arpa/inet.h>
<stdlib.h>
<string.h>
<unistd.h>
<netinet/in.h>
<time.h>

#define MAXPENDING 5
#define BUFFSIZE 25

// Maximo nro de conexiones admitidas

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 <puerto>\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
// Proposito

: Cliente
: 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

<stdio.h>
<sys/socket.h>
<arpa/inet.h>
<stdlib.h>
<string.h>
<unistd.h>
<netinet/in.h>

#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 <ip de servidor>
<puerto>\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
// Proposito
// Autor
// FCreacion
// FModific.

: time_client
: Se conecta al servidor y muestra la fecha y
hora que recibe como respuesta
: Edwin Carrasco
: 08/07/2013
: ---

#include <stdio.h>
#include <winsock.h>
#include <stdlib.h>
#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 <ip de servidor>
<puerto>\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.

1.

2.

3.

4.

5.

6.

TRABAJOS DE LABORATORIO.

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.
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.
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.
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.
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.
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.
b.
c.
d.

Las direcciones IP del emisor y receptor


El nmero de los puertos utilizados en el emisor y el receptor
El tamao de la ventana de congestionamiento
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.
2.
3.
4.

Lopez , Novo; Protocolos De Internet Ed. AlfaOmega


Comer Internetworking With Tcp/Ip Volumen 1. Ed. Prentice Hall 4 edicin.
Comer Internetworking With Tcp/Ip Volumen 2. Ed. Prentice Hall 3 edicin.
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.
2.
3.

4.
5.

6.

7.

http://www.beej.us/guide/bgnet/ (F. V. 24/06/2013)


http://www.linuxhowtos.org/C_C++/socket.htm (F. V. 24/06/2013)
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)
Microsoft. Winsock Reference. http://msdn.microsoft.com/enus/library/windows/desktop/ms741416%28v=vs.85%29.aspx (F. V. 24/06/2013)
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)
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)
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
Ejecucin del ejercicio de ejemplo
Resolucin del ejercicio propuesto 01
Resolucin del ejercicio propuesto 02
Resolucin del ejercicio propuesto 03
Resolucin del ejercicio propuesto 04
Resolucin del ejercicio propuesto 05
Resolucin del ejercicio propuesto 06
TOTAL

SESION 01
Procedimental
20
------20

SESION 02
Procedimental
-03
03
03
03
04
04
20

You might also like