190 likes | 271 Views
Infra-Estrutura de Comunicação (IF678). Rafael Lucena Roberta Mota Rubens Lopes Rodolfo Santos João Pedro Cordeiro. Aula Prática 03 – 2011.2. CIn/UFPE. Agenda: Fazer o cliente/servidor da aula passada comunicar dois computadores diferentes. Programação Concorrente (Threads)
E N D
Infra-Estrutura de Comunicação(IF678) Rafael Lucena Roberta Mota Rubens Lopes Rodolfo Santos João Pedro Cordeiro Aula Prática 03 – 2011.2 CIn/UFPE
Agenda: • Fazer o cliente/servidor da aula passada comunicar dois computadores diferentes. • Programação Concorrente (Threads) • Exercício Chat • Exercício Transferência de Arquivos • Exercício Web Server
Programação Concorrente: • O termo programação concorrente é usado no sentido abrangente, para designar a programação paralela e a programação distribuída
Objetivos da Programação Concorrente • Reduzir o tempo total de processamento • múltiplos processadores • Aumentar confiabilidade e disponibilidade • processadores distribuídos • Obter especialização de serviços • sistemas operacionais • simuladores • Implementar aplicações distribuídas • correio eletrônico
Programação Concorrente Fluxo único de execução Vários fluxos de execução tarefa 1 tarefa 1 tarefa 2 tarefa 3 tarefa 2 tarefa 3 cada fluxo possui uma pilha de execução
Thread • Éuma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas concorrentemente.
Estados de uma Thread • Criação: Neste estado, o processo pai está criando a thread que é levada a fila de prontos; • Execução: Neste estado a thread está usando a CPU; • Pronto: Neste estado a thread avisa a CPU que pode entrar no estado de execução e entra na fila de prontos; • Bloqueado: Neste estado, por algum motivo, a CPU bloqueia a thread, geralmente enquanto aguarda algum dispositivo de I/O; • Término: Neste estado são desativados o contexto de hardware e a pilha é desalocada. • Esperando e Finalizado.
Principais métodos em Java • start(): inicia a execução da thread (método run) • suspend(): suspende a execução da thread que está executando • sleep(): faz a thread que está executando dormir por um tempo determinado • yield(): faz a thread que está executando dormir por um tempo indeterminado • resume(): resume a execução de uma thread suspensa • stop(): termina a execução de uma thread; a thread não pode ser mais executada.
Principais métodos em Java • join(): método que espera o término da THREAD para qual foi enviada a mensagem para ser liberada. • interrupt(): método que interrompe a execução de uma THREAD. • interrupted(): método que testa se uma THREAD está ou não interrompida.
Exemplo de threads Em java publicclass Conta {//... publicdouble saldo = 0; void creditar(doublevc) { saldo = saldo+vc; } void debitar(doublevd) { if(saldo>vd){ saldo = saldo-vd; } } }
Exemplo de threads Em java publicclass Credito extends Thread { private Conta conta; privatedoubleval; public Credito(Conta c,double v) { conta = c; val = v; } publicvoidrun() { conta.creditar(val); } }
Exemplo de threads Em java publicclass Debito extends Thread { private Conta conta; privatedoubleval; public Debito(Conta c, double v) { conta = c; val = v; } publicvoidrun() { conta.debitar(val); } }
Exemplo de threads Em java public class Teste { public static void main(String[] args) { Conta c = new Conta(); c.saldo=12; Thread a = new Credito(c, 23.0); Thread b = new Debito(c, 12.0); a.start(); b.start(); System.out.println(c.saldo); } }
Exercício 1 • Crie um chat 1 para 1 utilizando o protocolo TCP. Utilize threads para conseguir escutar e enviar mensagens ao mesmo tempo.
Exercício 2 • Crie um programa que envie e receba um arquivo utilizando o protocolo TCP. Utilize threads para implementar esse programa. O comando para transferência de arquivos é representado por @. • Ex: • @ C:\Users\Rafael\Documents\Teste.txt • OBS: • Só precisa enviar um arquivo por vez. • Emita uma mensagem quando o envio for completo ou se acontecer algum erro.
Exercício 3 • Junte os exercícios 1 e 2 para criar um chat 1 para 1 com transferência de arquivo. O comando para transferência de arquivos é representado por @. • Ex: • @ C:\Users\Rafael\Documents\Teste.txt OBS: • Só precisa enviar um arquivo por vez. • Emita uma mensagem quando o envio for completo ou se acontecer algum erro.
Exercício 4 • Trata-se de um servidor Web, que responderá a requisições HTTP, bastante simples. Com as seguintes regras: • Deve ser implementado utilizando-se a API de Java • Ele deve manipular apenas uma requisição HTTP; • Ele deve enviar uma mensagem de resposta ao cliente contendo linhas de cabeçalho e o objeto desejado, se existente; • A única verificação necessária é quando o objeto não for encontrado, deve-se retornar: “HTTP/1.0 404 NotFound” • Teste seu servidor utilizando um navegador qualquer! • Mantenha os arquivos que serão baixados na mesma pasta do seu projeto • Dicas: - utilize as classes ServerSocket, Socket, StringTokenizer e File - reveja a aula sobre HTTP - consulte a RFC[2616] • baixar código parcial em www.cin.ufpe.br/~jpmc/comunicacao
Exemplo – O que deve ser feito Requisição (via browser ou telnet) telnet: GET /index.html HTTP/1.0 Host: localhost Browser: http://ip:porta Resposta (seu servidor) HTTP/1.0 200 OK Content-Language: pt-BR Content-Length: 53 Content-Type: text/html Connection: close CRLF “enter” dados ... Requisição (via browser ou telnet) telnet: GET /img2.png HTTP/1.0 Host: localhost Browser: http://ip:porta Resposta (seu servidor) HTTP/1.0 200 OK Content-Language: pt-BR Content-Length: 733 Content-Type: image/png Connection: close CRLF “enter” dados ...