Professional Documents
Culture Documents
TECNOLOGIAS DE COMUNICACION
GUIA DE LABORATORIO
ECP 1 de 22
II. OBJETIVOS
Al finalizar la presente prctica el estudiante:
1.
2.
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.
1.
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.
// 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
// 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);
}
// 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);
}
}
// 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
#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);
}
// Establecer la conexion
if (connect(sock,(struct sockaddr *) &echoserver,
sizeof(echoserver)) < 0 )
{
AvisarError("No se pudo conectar al servidor");
}
: serv_tcp
: Recibe un mensaje y lo envia de vuelta al
cliente
: Edwin Carrasco (Adaptado de [1])
: 08/07/2013
: ---
#include <stdio.h>
#include <winsock.h>
#include <stdlib.h>
#pragma comment (lib, "Ws2_32.lib")
#define MAXPENDING 5
#define BUFFSIZE 32
2.
Solucin
: 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
// 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
/* Establecer la conexion */
if (connect(sock,(struct sockaddr *) &timeServer,
sizeof(timeServer)) < 0 )
{
AvisarError("No se pudo conectar al servidor");
}
: 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
/* 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:");
VII.
1.
2.
3.
4.
5.
6.
TRABAJOS DE LABORATORIO.
VIII. BIBLIOGRAFIA
LIBROS
1.
2.
3.
4.
REFERENCIAS WEB
1.
2.
3.
4.
5.
6.
7.
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