• Nenhum resultado encontrado

10-SDRC-ProgramaçãoemRedecomJava

N/A
N/A
Protected

Academic year: 2021

Share "10-SDRC-ProgramaçãoemRedecomJava"

Copied!
31
0
0

Texto

(1)

Programação em rede com Java

Curso:

Engenharia de Controle e Automação

Disciplina:

Disciplina:

Sistemas Distribuídos e Redes de Computadores

Professor:

(2)

Programação em rede com Java



Identificação de Hosts (número IP)

o Cada computador conectado a uma rede TCP/IP é chamado de Host e é

identificado por um único número de 32 bits, denominado de número IP.

o O número IP é representado por quatro grupos de 8 bits, limitando desta

forma o valor numérico de cada grupo ao valor máximo de 255.

o Exemplo: o Exemplo:

(3)

Programação em rede com Java



Identificação de Processos (Portas)

o A comunicação entre dois processos em uma rede TCP/IP é assimétrica,

no sentido um processo faz o papel de servidor, oferecendo um serviço e outro faz o papel de cliente do serviço.

o Em um único Host vários processos podem estar fazendo o papel de

servidor, oferecendo serviços através de um único meio físico. Portanto, é servidor, oferecendo serviços através de um único meio físico. Portanto, é preciso uma forma de identificar os servidores em um mesmo Host.

o Isto é feito por meio da associação de um número inteiro, chamado de

porta, ao processo servidor.

o Essa associação é feita pelo processo assim que é carregado, por meio de

uma chamada ao sistema.

o O número da porta pode variar de 1 a 65535, no entanto os números de 1 a

(4)

Programação em rede com Java



Programação em Rede com Java

o O pacote java.net contém as classes e interfaces usadas para

programação de sistemas em rede com Java



Comunicação básica entre aplicações

o As classes Socket, ServerSocket, DatagramSocket, DatagramPacket e

InetAddress, fornecem os métodos necessários para a comunicação básica entre dois processos

o As classes Socket e ServerSocket são utilizadas para comunicação

orientada à conexão, enquanto que as classes DatagramSocket e DatagramPacket são utilizadas para comunicação não orientada à conexão

(5)

Programação em rede com Java

(6)

Programação em rede com Java



Java Sockets Orientado a Conexão

o TCP - orientado a conexão

• java.net.Socket

(7)

Programação em rede com Java



Java Sockets Orientado a Conexão

o O servidor executa em um computador específico e possui um socket

associado a um número de porta;

o O servidor apenas escuta, aguardando que um cliente solicite o

estabelecimento de uma conexão;

o O cliente deve conhecer em qual máquina o servidor está sendo executado o O cliente deve conhecer em qual máquina o servidor está sendo executado

e a porta no qual ele escuta;

o O servidor aceita a conexão e recebe um novo socket associado à mesma

porta;

o Ele necessita do novo socket para poder continuar escutando no socket

original por requisições de conexão, enquanto atende o cliente já conectado;

(8)

Programação em rede com Java



Java Sockets Orientado a Conexão

o Do lado cliente, se a conexão foi aceita, um socket é criado para ser

utilizado na comunicação com o servidor;

o O cliente e o servidor podem agora se comunicar, escrevendo e escutando

em seus respectivos sockets;

o Os dados são enviados e recebidos através de fluxos de entrada e saída. o Os dados são enviados e recebidos através de fluxos de entrada e saída.

Os seguintes métodos são utilizados:

InputStream getInputStream(): retorna um fluxo de entrada para este socket.OutputStream getOutputStream(): retorna um fluxo de saída para este socket. o A classe ServerSocket implementa um socket servidor que utiliza conexão.

Um socket servidor espera por requisições que venham da rede. Ele realiza operações baseadas na requisição e possivelmente envia os resultados ao requerente:

(9)

Programação em rede com Java



Sockets Clientes

o Topos os programas cliente seguem o mesmo scritp básico:

• 1. Criam a conexão de socket cliente

• 2. Adquirem fluxos de leitura e escrita para o socket

• 3. Utilizam os fluxos de acordo com o protocolo do servidor

• 4. Fecham os fluxos

• 4. Fecham os fluxos

(10)

Programação em rede com Java



Sockets Servidores

o Os servidores não criam conexões de forma ativa. Em vez disso, eles

permanecem passivamente aguardando um pedido de conexão de cliente, e depois fornecem seus serviços. Os servidores são criados com o seguinte script:

• 1. Criam o socket servidor e iniciam a escuta.

• 1. Criam o socket servidor e iniciam a escuta.

• 2. Chamam o método accept() para obter novas conexões.

• 3. Criam fluxos de entrada e saída para o socket retornado.

• 4. Conduzem a conversação com base no protocolo combinado.

• 5. Fecham os fluxos e o socket do cliente.

• 6. Voltam ao Passo 2 ou continuam até o Passo 7.

(11)

Programação em rede com Java

(12)

Programação em rede com Java

(13)

Programação em rede com Java

(14)

Programação em rede com Java



Agora um exemplo de cliente e servidor de eco, usando

sockets TCP

o Servidor: recebe uma linha do cliente e devolve essa mesma linha para o

cliente.

• Arquivo: ServidorDeEco.java

Cliente: espera o usuário digitar uma linha, envia essa linha para o servidor,

o Cliente: espera o usuário digitar uma linha, envia essa linha para o servidor,

recebe essa linha de volta do servidor e mostra no vídeo.

(15)

Programação em rede com Java



Qual o problema na solução anterior?

o Apenas um cliente por vez pode se conectar ao servidor

o Imagine agora que em vez de um servidor de eco, tivéssemos um servidor

de “chat” (bate papo). Vários clientes tinham que estar conectados ao mesmo tempo no servidor

o Para que isso possa ocorrer, a solução é usar a Thread o Para que isso possa ocorrer, a solução é usar a Thread

o A linha de execução inicial dispara outra linha a cada novo cliente e fica

(16)

Programação em rede com Java



Threads em Java

o Em Java é possível lançar várias linhas de execução do mesmo programa.

Chamamos a isso de Threads ou MultiThreading

o Vejamos primeiramente um exemplo de execução sequencial

• No próximo exemplo o método f() da classe TesteA é chamado

sequencialmente 5 vezes sequencialmente 5 vezes

(17)

Programação em rede com Java

(18)

Programação em rede com Java



Threads em Java

o No exemplo a seguir vez de esperar algum tempo (Thread.sleep), o método

f usa efetivamente a CPU contando até 1, 2 e 3 milhões.

o São lançados 3 threads. Cada um deles é interrompido no meio das

(19)

Programação em rede com Java

(20)

Programação em rede com Java



Um servidor e cliente de chat

o Vamos modificar o servidor/cliente de eco acima, para um servidor/cliente

de chat

o O servidor de chat deve aceitar conexão de um cliente, disparar uma thread

para atender esse cliente e esperar por conexão de um novo cliente

o A thread que atende um cliente específico deve esperar que este envie uma o A thread que atende um cliente específico deve esperar que este envie uma

mensagem e replicar esta mensagem para todos os clientes conectados. Quando esse cliente desconectar a thread deve avisar a todos os clientes conectados que isso ocorreu

o Portanto, é necessário que o servidor guarde em um vetor, todos os

(21)

Programação em rede com Java



Um servidor e cliente de chat

o O cliente deve aguardar o usuário digitar uma mensagem no teclado e

enviar essa mensagem ao servidor

o Mas não é tão simples assim. Há um problema: mensagens podem chegar

a qualquer momento no servidor e devem ser mostradas no vídeo. Se você pensou também em thread, acertou

pensou também em thread, acertou

o Um thread é lançada no início e fica esperando qualquer mensagem do

servidor para apresentá-la no vídeo

o A linha de execução principal do cliente se encarrega de esperar uma

mensagem digitada pelo usuário e enviá-la para o servidor

o Exemplos:

Arquivo: ServidorDeChat.javaArquivo: ClienteDeChat.java

(22)

Programação em rede com Java



Java Sockets Sem Conexão

o UDP - sem conexão

• java.net.DatagramPacket

(23)

Programação em rede com Java



Java Sockets Sem Conexão

o Algumas aplicações não requerem o canal seguro de comunicação

ponto-a-ponto provido pelo protocolo TCP

o Nestes casos, a aplicação pode utilizar um modo de comunicação que

entrega pacotes independentes cuja entrega e sequenciamento das mensagens não são garantidos

mensagens não são garantidos

o O protocolo UDP provê este serviço o Classes utilizadas:

DatagramPacket: insere bytes em um pacote UDP denominado datagramaDatagramSocket: envia e recebe datagramas UDP

(24)

Programação em rede com Java



Java Sockets Sem Conexão

o Para enviar dados, insere-se os mesmos em um DatagramPacket,

enviando-o através do DatagramSocket

o Para receber dados, recebe-se um DatagramPacket através de um

DatagramSocket, procedendo-se em seguida a remoção dos dados a partir do pacote

do pacote

o O mesmo tipo de socket é utilizado tanto no cliente quanto no servidor o Trabalha com pacotes individuais e não com fluxo: os dados enviados em

um datagrama são enviados em um único pacote

(25)

Programação em rede com Java



Java Sockets Sem Conexão

o Pacotes datagramas são usados para implementar um serviço de entrega

de pacotes sem conexão

o Cada mesagem é roteada de uma máquina até a outra baseada somente

na informação contida dentro do pacote

o Múltiplos pacotes enviados de uma máquina a outra poderiam ser roteados o Múltiplos pacotes enviados de uma máquina a outra poderiam ser roteados

de uma forma diferente e podem chegar em qualquer ordem

o A entrega de pacotes não é garantida o Classe DatagramPacket

DatagramPacket(byte[] buf, int length): constrói um pacote de datagrama

(26)

Programação em rede com Java



Java Sockets Sem Conexão

o Um socket datagrama (A classe DatagramSocket ) é o ponto de envio ou

recebimento para um serviço de entrega de pacotes

DatagramSocket(int port, InetAddress laddr): cria um socket datagrama,

ligado a um endereço local (laddr, port) específico

o Cada pacote enviado ou recebido em um socket datagrama é o Cada pacote enviado ou recebido em um socket datagrama é

individualmente endereçado e roteado

o Múltiplos pacotes enviados de uma máquina para outra pode ser roteado

diferentemente e pode chegar em qualquer ordem

o Envio e Recebimento de pacotes

void receive(DatagramPacket p): recebe um pacote de datagrama deste

socket

(27)
(28)
(29)

Programação em rede com Java



Mas por quê usar UDP ?

o Quando se deseja rapidez e eficiência a operação sem conexão utilizando o

protocolo UDP é mais adequado, mas não garantido.

o Datagramas têm menos overhead do que sockets TCP, pois nenhum

controle de fluxo é necessário quando se envia ou recebe um datagrama UDP.

UDP.

o Os datagramas UDP também podem ser usados num servidor Java que

envie atualizações periódicas para um conjunto de clientes. O servidor teria de fazer menos trabalho e consequentemente seria mais rápido, se ele

pudesse simplesmente enviar datagramas UDP em vez de ter de iniciar uma conexão TCP para cada cliente.

(30)

Programação em rede com Java



Atividade 01

o Execute os programas ServidorEcoDatagrama.java e

ClienteEcoDatagrama.java

o O que pode ser notado (diferença) em relação ao funcionamento dos

(31)

Programação em rede com Java



Atividade 02

o Capturar e analisar o trafego utilizando o Ethereal para uma comunicação

orientada a conexão

• Programas: ReceptorUDP.java e RemetenteUDP.java

o Capturar e analisar o trafego utilizando o Ethereal para uma comunicação

sem conexão sem conexão

Referências

Documentos relacionados

y Apesar da norma produzida no Brasil estar no estado da arte e ser baseada nas normas internacionais: VDE-AR-N 4105:2011-08, CEI 0-21:2012-06 e IEC 61727:2004-12 as nossas tensões

Apesar de todas as vantagens, POO não é a melhor solução para tudo no mundo da programação. O bom senso e a experiência devem ser utilizados na escolha das alternativas para

 Para uma mesma classe é possível definir mais de um objeto, cada um com suas..

Em um sistema com programação orientada a objetos, as classes podem ser consideradas o menor conjunto de informações que formam o grande sistema. O diagrama de

• Classes são espécies de montadoras de objetos, que definem suas características como, quais funções são capazes de realizar e quais os atributos que o objeto

Em nosso cotidiano, consideramos as coisas materiais como objetos (carros, por exemplo), que têm seus atributos (características descritivas como marca, modelo, cor, peso, etc.) e

Para construir classes utilitárias, onde não faz sentido ter que instanciar um objeto para usar os métodos. • Ex: java.lang.Math,

• Todos os métodos não definidos de uma classe abstrata deverão ser definidos nas subclasses ou estas deverão a ser consideradas abstratas e não poderão ser instanciadas...