Logotipo INPE

Rafael Santos

rafael.santos@lac.inpe.br
http://www.lac.inpe.br/~rafael.santos

Informações

Esta disciplina não é mais oferecida.

Verifique o site da CAP para informações e anúncios sobre oferta de disciplinas.

2006

Atenção: os horários das aulas serão decididos com os alunos e poderão ser modificados. Toda modificação será informada previamente por e-mail.
As aulas serão na sala 10, prédio CTE/LAC ou em local informado com antecedência.
Verifique freqüentemente as tarefas passadas para cada aula. Veja também a seção de material indicado para documentos e links.
Importante: além dos horários marcados no calendário abaixo espera-se que os alunos dediquem algumas horas semanais (mínimo estimado: 3) para exercícios, resolução dos problemas e desenvolvimento dos projetos sugeridos. Sem esta dedicação adicional não será possível terminar os projetos a contento.

22/6
10:00

Apresentação da disciplina, métodos de exposição e avaliação. Informações sobre a primeira tarefa.
Tarefas para a próxima aula: entender o suficiente de Java para compilar e executar uma aplicação; instalar e aprender a usar o JDK e o ambiente Eclipse.

29/6
10:00

Aula suspensa por causa da falta de luz.

6/7
8:30

Programação em Java: classes e aplicações. Compilando e executando uma aplicação. Conceitos de exceção e de entrada e saída (streams). Apresentação de conceitos de programação para redes de computadores.
Programação em Java: programando clientes simples de serviços existentes.
Tarefas para a próxima aula: conhecidos os conceitos de programação para redes, pensar em aplicações simples cliente-servidor que não sejam emuláveis com servidores existentes.
Praticar também a criação de aplicações que fazem entrada e saída em Java. Sugestão: criar uma aplicação que lê logs em um formato texto conhecido qualquer, processe os dados e grave em outro arquivo (com outro formato). Pode ser um filtro temporal (selecionando eventos em determinadas horas ou dias) ou de conteúdo (selecionando somente alguns dos atributos dos logs). Use como base o texto sobre entrada e saída.

13/7
10:00

Programação em Java: programando servidores simples (single-threaded) para novos serviços. Usando o telnet como cliente destes servidores. Criação de clientes específicos para estes servidores (casos de tipos de dados diferentes de strings e protocolos mais complexos do que o "toma-lá-dá-cá").
Tarefas para a próxima aula: Vimos que o mecanismo de exceções não garante a graceful degradation de aplicações, cuidados especiais devem ser tomados para casos óbvios de erros, e estes cuidados refletem-se no preparo do protocolo de comunicação entre cliente e servidor. Modifique o servidor e cliente de arquivos para os casos de arquivos solicitados não existentes.
Modifique também (ou reescreva) o servidor de arquivos para que o mesmo possa fazer operações mais complexas ou iterativas, como, por exemplo, mudar diretórios, apagar arquivos no servidor, receber arquivos do cliente, manter um log de operações realizadas, fazer autenticação simples com nome de usuário e senha. Dica: veja os métodos da classe File na documentação do JDK (sugiro baixar e instalar a documentação da API e o tutorial de Java).

20/7
10:00

O que é uma thread ou linha de execução? Como criar aplicações simples com múltiplas linhas de execução em Java. Criando servidores com múltiplas linhas de execução.
Tarefas para a próxima aula: repensar as aplicações pedidas considerando o que foi visto nesta aula, em especial considerando a necessidade de escrever aplicações servidoras e clientes específicas e multithreaded.

26/7
10:00

Aula adiantada, dia 27 será feriado.
Veremos a implementação simples do servidor de jogo-da-velha usando o telnet como clientes (um servidor/vários clientes sincronizados).

3/8
10:00

Veremos a implementação simples do servidor de cálculo de integrais (um cliente/vários servidores).

10/8
10:00

Reunião/plantão para acompanhamento dos projetos.

17/8
10:00

Reunião/plantão para acompanhamento dos projetos.

24/8
10:00

Reunião/plantão para acompanhamento dos projetos.

31/8
10:00

Reunião/plantão para acompanhamento dos projetos.
Entrega dos projetos, protótipos e relatórios.

Material indicado:

Bibliografia indicada:

  • Qusay Mahmoud, Distributed Programming with Java, Manning Publications, 1999.
  • David Reilly and Michael Reilly, Java Network Programming and Distributed Computing, Addison-Wesley Professional, 2000.
  • Cay Horstmann, Core Java 2, Vol. 1, Makron, 2000.
  • Harvey M. Deitel, Java, Como Programar - 6a. Edição, Pearson Brasil, 2006.
  • Thomas W. Christopher, George K. Thiruvathukal, High-Performance Java Platform Computing, Prentice-Hall, 2000.
  • Rafael Santos, Introdução à Programação Orientada a Objetos Usando Java, Campus, 2003.

Projetos sugeridos

Estes são os projetos sugeridos para desenvolvimento para compreensão dos tópicos da disciplina. Alunos da disciplina deverão desenvolver projetos mais complexos do que os listados aqui para avaliação.

Alguns projetos requerem o desenvolvimento de algoritmos usando APIs de Java que não são objetivo desta disciplina. Em caso de dúvida consulte o professor para recomendação de leitura complementar.

Servidor simples de FTP

Escreva um servidor simples de FTP (não necessariamente multithreaded) com a capacidade de executar corretamente os comandos pwd, ls, get e exit. Crie também um cliente específico para este servidor.
Dicas:
  • A complexidade maior deve ser no protocolo, uma vez que alguns comandos poderão causar respostas de uma linha ou várias ou mesmo mudar o modo de interação para baixar um arquivo.
  • Use uma interface simples no cliente (por causa da capacidade de baixar arquivos na mesma conexão, não podemos usar o telnet).
  • Lembre-se de que se for executar o servidor na mesma máquina/diretório do cliente, arquivos poderão ser reescritos.

Melhorias no servidor simples de FTP

Modifique o servidor simples de FTP para que o mesmo execute corretamente os comandos put e cd. Diretórios correntes no servidor podem ser criados com novas instâncias da classe File.

Serviço de meta-dados de arquivos

Considere vários servidores distintos de arquivos (semelhante a servidores de FTP). Cada servidor tem uma coleção dinâmica de arquivos disponíveis, que pode ou não ser igual à coleção de outro servidor. Consideremos que estas coleções não são automaticamente indexadas por sites de busca.
Escreva um servidor de meta-dados que leia de cada servidor de arquivos os nomes dos arquivos disponíveis e armazene esta informação. Um cliente deste servidor deve conectar-se ao mesmo para localizar qual (ou quais) servidores de arquivos contém um arquivo desejado. O servidor de meta-dados deve preferencialmente retornar o caminho (servidor, porta, nome do arquivo) para que o cliente baixe o arquivo diretamente do servidor de dados.
Dicas:
  • Na medida do possível, use o servidor de FTP que já deve ter sido criado.
  • Para simplificar, considere que cada servidor tem um único diretório onde arquivos são servidos.

Melhorias no servidor de meta-dados de arquivos

Modifique o servidor de meta-dados para que o mesmo considere arquivos com datas ou tamanhos diferentes, interagindo com o cliente para que o mesmo escolha o serviço correto.

Verificador simples de integridade de sistemas de arquivos

Considere um sistema cliente-servidor onde um cliente registra o conteúdo de um diretório com um servidor na forma de uma assinatura e com alguma freqüência verifica se a assinatura atual é igual à armazenada no servidor. A assinatura deve ser um registro dos arquivos, datas e tamanhos dos mesmos. Este sistema poderia ser a base de um verificador de integridade de sistemas de arquivos, indicando que arquivos foram modificados em um cliente.
Valid HTML 4.0 Transitional            Valid CSS!