Vous êtes sur la page 1sur 4

DISEO E IMPLEMENTACION DE ARQUITECTURAS DISTRIBUIDAS

Desarrollo de un
servidor y un cliente de
da/hora
Prctica 1

Pedro Santana Santana
Jos Manuel Garca Daz
30/03/2008




Introduccin

Para que dos programas puedan comunicarse entre s es necesario que se cumplan ciertos
requisitos:
Que un programa sea capaz de localizar al otro.
Que ambos programas sean capaces de intercambiarse cualquier secuencia de octetos,
es decir, datos relevantes a su finalidad.
Para ello son necesarios los tres recursos que originan el concepto de socket:
Un protocolo de comunicaciones, que permite el intercambio de octetos.
Una direccin del Protocolo de Red (Direccin IP, si se utiliza el Protocolo TCP/IP), que
identifica una computadora.
Un nmero de puerto, que identifica a un programa dentro de una computadora.
Los sockets permiten implementar una arquitectura cliente-servidor. La comunicacin ha de
ser iniciada por uno de los programas que se denomina programa cliente. El segundo programa
espera a que otro inicie la comunicacin, por este motivo se denomina programa servidor.
Un socket es un fichero existente en la mquina cliente y en la mquina servidora, que sirve en
ltima instancia para que el programa servidor y el cliente lean y escriban la informacin. Esta
informacin ser la transmitida por las diferentes capas de red.
Las propiedades de un socket dependen de las caractersticas del protocolo en el que se
implementan. El protocolo ms utilizado es TCP, aunque tambin es posible utilizar UDP o IPX.
Gracias al protocolo TCP, los sockets tienen las siguientes propiedades:
Orientado a conexin.
Se garantiza la transmisin de todos los octetos sin errores ni omisiones.
Se garantiza que todo octeto llegar a su destino en el mismo orden en que se ha
transmitido.
Estas propiedades son muy importantes para garantizar la correccin de los programas que
tratan la informacin.
El protocolo UDP es un protocolo no orientado a la conexin. Slo se garantiza que si un
mensaje llega, llegue bien. En ningn caso se garantiza que llegue o que lleguen todos los
mensajes en el mismo orden que se mandaron. Esto lo hace adecuado para el envo de
mensajes frecuentes pero no demasiado importantes, como por ejemplo, mensajes para los
refrescos (actualizaciones) de un grfico..



Realizacin Prctica

La prctica en cuestin es realmente sencilla ya que existen varios ejemplos en la bibliografa
de la asignatura que implementan un servidor de da/hora. Nuestra tarea consisti en
entender la filosofa de funcionamiento de los sockets y modificar el cdigo para que tuviera
los requisitos expuestos en el guin.
Fichero cliente.
A continuacin se explicar las partes ms importantes del cliente TCP.
El cliente realiza las siguientes tareas:
- Realiza una conexin TCP indicando el host al que se quiere conectar y el servicio
que desea.
o s = connectTCP(host, service);
o connectTCP llama a connectsock que es la encargada de:
Mapea el nombre del servicio al puerto correspondiente
getservbyname(service, transport)
Mapea el nombre de host a la direccin IP
gethostbyname(host)
Mapea el nombre del protocolo al nmero de protocolo
getprotobyname(transport)
Con el protocolo elige el socket correspondiente(TCP)
if (strcmp(transport, "udp") == 0)
type = SOCK_DGRAM;
else
type = SOCK_STREAM;
Crea el socket
socket(PF_INET, type, ppe->p_proto)
Realiza la conexin
connect(s, (struct sockaddr *)&sin, sizeof(sin))
- Se queda esperando e imprime el resultado en la pantalla.
o while( (n = read(s, buf, LINELEN)) > 0) {
buf[n] = '\0'; /* ensure null-terminated */
(void) fputs( buf, stdout );}


Fichero Servidor.
El servidor solo permite la conexin a la mquina cuya direccin IP es: 172.16.3.2.
Los pasos ms importantes que realiza son:
- Crea una conexin pasiva TCP
o msock = passiveTCP(service, QLEN);
o passiveTCP llama a passivesock que se encarga de:
Mapea el nombre del servicio al puerto correspondiente
getservbyname(service, transport)
Mapea el nombre de host a la direccin IP
getprotobyname(transport)
Mapea el nombre del protocolo al nmero de protocolo
Con el protocolo elige el socket correspondiente
if (strcmp(transport, "udp") == 0)
type = SOCK_DGRAM;
else type = SOCK_STREAM;
Crea el socket
socket(PF_INET, type, ppe->p_proto)
Enlaza el socket
bind(s, (struct sockaddr *)&sin, sizeof(sin))
Se queda escuchando en el Puerto correspondiente
listen(service, qlen)
- Elige una nueva peticin de la cola de peticiones
o ssock = accept(msock, (struct sockaddr *)&fsin, &alen);
- Si la direccin IP no se corresponde con la 172.16.3.2 la rechaza sino enva la fecha
y hora.
o if(fsin.sin_addr.s_addr != inet_addr("172.16.3.2"))(void) close(ssock);
else
{
TCPdaytimed(ssock);
(void) close(ssock);
}
Ejecucin

Vous aimerez peut-être aussi