Sistemas Distribuídos 4º Ano MIEIC
Trabalho Prático nº 2 Serviço de Tempo com multicast


1  Introdução

Objectivo

Este trabalho prático tem por objectivo principal a consolidação dos conceitos fundamentais requeridos para a programação de aplicações distribuídas directamente sobre protocolos de comunicação. Pretende-se, neste caso, experimentar a interface de programação baseada em sockets em modo multicast.

2  A aplicação

A aplicação a desenvolver é uma versão multicast da aplicação cliente-servidora descrita no TP1.

A ideia é que agora o servidor envie periodicamente a hora para um grupo multicast, ao qual os clientes interessados se deverão associar.

Não precisa de implementar a operação para alterar a hora, a qual não beneficia de comunicação multicast.

Servidor

O programa servidor deverá ser invocado da seguinte maneira:
java MDateServer <multicast_addr> <port_number> <period>
onde
<multicast_addr> é o endereço IP do grupo multicast;
<port_number> é o número do porto do grup multicast;
<period> é o período em segundos com que a hora deverá ser difundida para o grupo.

Cliente

O programa cliente deverá ser invocado da seguinte maneira:
mdate_clnt <multicast_addr> <port_number>
onde
<multicast_addr> é o endereço IP do grupo multicast;
<port_number> é o número do porto do grup multicast.

Linguagem de Programação

Para constatar a interoperabilidade fácil entre aplicações simples escritas a este nível deverá desenvolver o cliente na linguagem C e o servidor em Java.

Dica: Se quiser pode inicialmente desenvolver um cliente em Java também.

Construção

Deverá escrever uma makefile que permitindo construir o cliente e o servidor como indicado a seguir:
        make mdate_client
        make MDateServer
 

Teste

Como acontece no TP1, os clientes e o servidor deverão imprimir na consola mensagens descrevendo a sua actividade.

3  Para Pensar

Uma implementação ingénua de multicast usaria uma única fila por grupo multicast, para manter as mensagens recebidas destinadas a esse grupo. Nesta implementação, as mensagens seriam removidas dessa fila, à medida que um cliente invocasse receivefrom(). Qual o problema desta implementação se houver mais do que um cliente no mesmo computador? Em que medida se pode considerar este comportamento válido? Como poderia implementar a bufferização de mensagens multicast de modo a evitar o problema que identificou acima?


This document was translated from LATEX by HEVEA.