Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


10 Programação Para Redes Em Java, Notas de estudo de Introdução à Programação de Computadores

programação

Tipologia: Notas de estudo

2012

Compartilhado em 04/03/2012

elcio-vieira-silva-6
elcio-vieira-silva-6 🇧🇷

4.5

(2)

1 documento

1 / 23

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Programação em Redes com Java
Especialização Avançada em Sistemas
Distribuídos - EASD
Módulo X – Programação
em Redes com Java
Marcela Santana e
Sérgio Gorender
Universidade Federal da Bahia
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17

Pré-visualização parcial do texto

Baixe 10 Programação Para Redes Em Java e outras Notas de estudo em PDF para Introdução à Programação de Computadores, somente na Docsity!

Programação em Redes com Java Especialização Avançada em SistemasDistribuídos - EASD^ Módulo X – Programaçãoem Redes com Java^ Marcela Santana eSérgio GorenderUniversidade Federal da Bahia

Programação em Redes com Java

  • A linguagem Java possui uma biblioteca de classes responsáveis pelaprogramação em rede, contendo

sockets unicast^

(TCP e UDP) e também

multicast^ (UDP). Esta biblioteca é a

java.net.

  • Java oferece os seguintes modos de utilização de

sockets:

  • o modo orientado a conexão, que funciona sobre o protocolo TCP• o modo orientado a

datagrama, que funciona sobre o protocolo UDP. Pacote java.net •^ Os dois modos funcionam sobre o protocolo IP.• Cada um desses modos tem sua aplicabilidade, com vantagens edesvantagens.

Programação em Redes com Java

  • Para que serve um

Socket^? “Os sockets são mecanismos de comunicação entre processos (IPC -InterProcess Communication, desenvolvidos por um grupo de pesquisa daUniversidade da Califórnia), que podem estar numa mesma máquina ou emmáquinas diferentes via rede. São diferentes dos

pipes, principalmente

Pacote java.net porque fazem distinção entre cliente e servidor, e a comunicação podeocorrer nos dois sentidos.”

Programação em Redes com Java Pacote java.netModo Orientado a conexão TCP/IP O processo de comunicação no modo orientado à conexão ocorre da seguinteforma:• O servidor escolhe uma determinada porta e fica aguardandoconexões nesta porta.• O cliente deve saber previamente qual a máquina servidora e a portaque o servidor está aguardando conexões.• O cliente solicita uma conexão em um

host/porta.

  • Se nenhum problema ocorrer o servidor aceita a conexão gerando um socket^ em uma porta qualquer do lado do servidor.• Assim é criado um canal de comunicação entre o cliente e o servidor.Em Java a comunicação confiável(modo orientado a conexão) aconteceatravés de^ sockets^ utilizando duas classes:

Socket^ (soquete de dados)

e

ServerSocket^ (soquete do servidor)

Programação em Redes com Java Pacote java.netSocket^ Alguns métodos^ public Socket(InetAddress address, int

port) public Socket(String

host, int^ port) public void close()public InetAddress getInetAddress()public InputStream getInputStream()public OutputStream getOutputStream()

Programação em Redes com Java

  • Modelo de comunicação em Java1) O servidor cria um

socket^ associado a uma porta

  1. O servidor espera uma conexão através do método

accept

  1. O cliente estabelece a conexão usando um

Socket

  1. Ambos se comunicam através de

InputStreams^ e Pacote java.net^ OutputStreams

Programação em Redes com Java

  • Esta solução apresenta um problema grave. Não permite que o servidoratenda simultaneamente a muitos clientes.• A rejeição de múltiplas conexões permite que qualquer clientemonopolize o serviço, conectando-se com ele por um longo tempo.• É possível ter um serviço muito mais interessante através de múltiplaslinhas de execução.• Sempre que o servidor estabelece uma nova conexão de soquete, ou sejaquando uma chamada de

accept^ tem êxito, uma nova linha de execução Pacote java.net deve ser ativada para cuidar da conexão entre o servidor e o cliente emquestão. O servidor volta então para esperar novas conexões.

Programação em Redes com Java Pacote java.net^ ServerSocket^ t1 t

Socket

ServerSocket(port)accept()new ThreadSocket()

Socket(end, port) OutputStreamInputStream Troca dados InputStreamOutputStream

Cria Socket(socket do Cliente) ThreadSocket

Retorna socket para comunicação

Programação em Redes com Java Exemplo^ public class Servidor {^ public static void main(String[] args) {try{Socket cSocket;ServerSocket sSocket = new ServerSocket(8080);while(true){System.out.println("Aceitando solicitacoes");cSocket = sSocket.accept();ThreadAtendeCliente tc = new ThreadAtendeCliente(cSocket);tc.start();} }catch (IOException e){}} }

Cria socketparacomunicação Aceita conexãoatravés do socket^ Cria thread paraAtender ao cliente

Programação em Redes com Java class ThreadAtendeCliente extends Thread { private Socket cSocket;public ThreadAtendeCliente(Socket cSocket) {this.cSocket = cSocket;} public void run(){System.out.println(“Atendendo a um ciente");try {InputStream in = cSocket.getInputStream();PrintWriter os = new PrintWriter(cSocket.getOutputStream());String msg = "Servidor "+ cSocket.getInetAddress() + "usando a porta " + cSocket.getPort() + " para responder a um cliente" ;msg=msg+"\n"+"A data e hora do sistema: " + new Date().toString();os.write(msg);os.close();cSocket.close();} catch (IOException e) {System.exit(1); } } } Exemplo

Programação em Redes com Java Enviando: HELO work-q7vxr6c89b/201.4.18.222Resposta: 220 itariri.ufba.br Kerio MailServer 6.0.8 ESMTP readyEnviando: MAIL FROM: [email protected]: 250 itariri.ufba.brEnviando: RCPT TO: [email protected]: 250 2.1.0 Sender okEnviando: DATAResposta: 550 5.7.0 Your server IP address is in the

SORBS DNSBL^ database, bye Enviando: SUBJECT: Teste em Java para envio de e-mailResposta: nullEnviando: Corpo da mensagem .Resposta: nullMensagem enviada com sucesso!

Tabela de Spam

Exemplo2 - Resultado

Programação em Redes com Java Pacote java.netPacote java.netModo Orientado a datagrama UDP/IPSockets^ UDP/IP são muito mais rápidos que

sockets^ TCP/IP. São mais simples, porém menos confiáveis.Em UDP não temos o estabelecimento de conexão, sendo que a comunicaçãoocorre apenas com o envio de mensagens.Um mensagem é um

datagrama, que é composto de um remetente (

sender),

um destinatário ou receptor (

receiver), e a mensagem (

content).

Em UDP, caso o destinatário não esteja aguardando uma mensagem ela éperdida.Em Java a comunicação não confiável (modo orientado a

datagrama)

acontece através de

sockets^ utilizando duas classes:

DatagramSocket

e

DatagramPacket

Programação em Redes com Java DatagramPacket

(Datagramas a serem enviados pela rede

Alguns métodos^ public DatagramPacket(byte ibuf[], int ilength)public DatagramPacket(byte ibuf[], int ilength,

InetAddress iaddr, int iport)public InetAddress getAddress()public byte[] getData()public int getLength()public int getPort() Pacote java.net

Programação em Redes com Java public class ServidorUDP Exemplo public static void main(String[] args) {try{ DatagramSocket servidor = new DatagramSocket(4545);DatagramPacket question = new DatagramPacket(new byte[512], 512);int i=0;while(i<10){System.out.println("Aguardando envio de informacoes");servidor.receive(question);String toSend="Resposta Servidor";byte [] buffer = toSend.getBytes();DatagramPacket resposta = new DatagramPacket(buffer, buffer.length,

question.getAddress(), question.getPort());servidor.send(resposta);i++; } servidor.close();}catch (SocketException e){

e.printStackTrace(); }catch (UnknownHostException o){

o.printStackTrace(); }catch (IOException a){

a.printStackTrace(); } } }