SlideShare uma empresa Scribd logo
1 de 13
Baixar para ler offline
Java 2 Standard Edition

Fundamentos de

Helder da Rocha
www.argonavis.com.br

1
Sobre este módulo
Este módulo pretende apenas cobrir conceitos
essenciais sobre programação em rede com Java
Como criar um servidor e um cliente TCP/IP
Como abrir uma conexão TCP/IP
Como ler de uma conexão
Como escrever para uma conexão

Classes abordadas do pacote java.net
Socket e ServerSocket
InetAddress
URL

Para maiores detalhes, consulte as referências no
final do capítulo
2
Pacote java.net
O pacote java.net contém classes para implementar
comunicação através da rede
Fáceis de usar. Semelhante à criação de arquivos:
Socket sock = new Socket("www.x.com", 80);
PrintWriter os = new PrintWriter(
new OutputStreamWriter(
sock.getOutputStream()));
BufferedReader is = new BufferedReader(
new InputStreamReader(
sock.getInputStream());
os.println("GET / HTTP/1.0nn");
String linha = "";
while ((linha = is.readLine()) != null) {
System.out.println(linha);
} // ... feche o socket com sock.close();

(1)

(2)
(3)

(1) Abre socket para servidor Web, (2) envia comando e (3) imprime resposta

3
TCP/IP no pacote java.net
A comunicação via protocolo TCP (Transfer Control
Protocol), confiável, é suportada pelas classes
Socket (soquete de dados)
ServerSocket (soquete do servidor).

A comunicação via UDP (Unreliable Datagram
Protocol), não-confiável, é suportada pelas classes
DatagramSocket (soquete de dados UDP),
DatagramPacket (pacote UDP)
MulticastSocket (soquete UDP para difusão).

Endereçamento
InetAddress (representa um endereço na Internet)
URL (representa uma URL)
4
URL
Representa uma URL
Principais métodos
openStream() obtém um InputStream para os dados
openConnection(): retorna um objeto URLConnection que contém
métodos para ler o cabeçalho dos dados
getContent(): retorna os dados diretamente como Object se conteúdo
for conhecido (texto, imagens, etc.)

Para imprimir a página HTML de um site
try {
URL url = new URL("http://www.site.com");
InputStreamReader reader =
new InputStreamReader(url.openStream());
BufferedReader br = new BufferedReader(reader);
String linha = "";
while ( (linha = br.readLine()) != null) {
System.out.println(linha);
}
} catch (MalformedURLException e) { ... }

5
InetAddress
Representa um endereço Internet
Principais métodos estáticos construtores
getLocalHost() retorna InetAddress
getByName(String host) retorna InetAddress

Principais métodos de instância
getHostAddress() retorna String com IP do InetAddress
getHostName() retorna String com nome no InetAddress

Para descobrir o IP e nome da máquina local:
InetAddress address = InetAddress.getLocalHost();
String ip = address.getHostAddress();
String nome = address.getHostName();

6
Socket
Um dos lados de uma conexão bidirecional TCP
Principais métodos servem para obter fluxos de
entrada e saída
getInputStream()
getOutputStream()
close()

Exemplo
InetAddress end =
InetAddress.getByName("info.acme.com");
Socket con = new Socket(end, 80);
InputStream dados = con.getInputStream();
OutputStream comandos =
con.getOutputStream();

Depois de obtido os fluxos, basta ler ou enviar dados

7
Socket (2)
Para ler ou gravar caracteres ao invés de bytes,
pode-se decorar os fluxos obtidos de um socket com
as classes Reader e Writer:
Socket con = new
Socket("maquina.com.br", 4444);
Reader r = new InputStreamReader(
con.getInputStream());
Writer w = new OutputStreamWriter(
con.getOutputStream());
// Use aqui os fluxos de dados
con.close();
8
ServerSocket
Com ServerSocket pode-se implementar um servidor
que fica escutando uma porta a espera de um cliente
Principal método
accept(): aceita a conexão e retorna o seu socket

Exemplo de servidor dedicado
ServerSocket escuta = new ServerSocket(80);
while(true) {
Socket cliente = escuta.accept(); // espera
InputStream comandos =
cliente.getInputStream();
OutputStream dados =
cliente.getOutputStream();
// ... use os dados
cliente.close();
}

9
Exceções de rede
Várias exceções podem ocorrer em um ambiente de rede
O programa deve tomar medidas para reduzir o impacto das exceções
inevitáveis, como rede fora do ar ou conexão recusada
O compilador irá informar, durante o desenvolvimento, as exceções
que precisam ser declaradas ou tratadas

As exceções mais comuns do pacote java.net são
SocketException
MalformedURLException
UnknownHostException
ProtocolException

Operações de timeout, liberação de threads, sincronização,
transações, etc. devem ser implementados pelo programador
em aplicações de rede
Não há exceções tratando esses problemas automaticamente

10
Exercícios
1. Escreva um programa que descubra e imprima o
número IP da sua máquina
2. Escreva um programa que
Conecte-se na porta HTTP (geralmente 80) de um
servidor conhecido
Envie o comando: "GET / HTTP/1.0nn"
Grave o resultado em um arquivo resultado.html

3. Servidor dedicado: escreva um servidor simples que
responda a comandos da forma "GET arquivo".
Localize o arquivo e imprima-o no OutputStream
Escreva um cliente que receba o arquivo e grave-o
localmente
11
Exercícios (2)
4. Servidor multithreaded: Escreva um programa que
use um ServerSocket para aguardar conexões de um
cliente. O programa deverá ter duas partes:
(1) uma classe principal (Servidor) que fica escutando a
porta escolhida (número acima de 1024) e
(2) uma classe que estende Thread (Conexao) e que irá
tratar as requisições do cliente.

O servidor deverá imprimir na tela todos os comandos
enviados por todos os clientes.
Os clientes enviam mensagens de texto, como um chat.

5. Crie um cliente para a aplicação acima e teste-o
em várias máquinas diferentes.
12
Curso J100: Java 2 Standard Edition
Revisão 17.0

© 1996-2003, Helder da Rocha
(helder@acm.org)

argonavis.com.br
13

Mais conteúdo relacionado

Mais procurados

Invasaocom exploits
Invasaocom exploitsInvasaocom exploits
Invasaocom exploitsNauber Gois
 
Seguranca informacao 1
Seguranca informacao 1Seguranca informacao 1
Seguranca informacao 1Nauber Gois
 
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...Felipe Santos
 
Threads 10: CompletableFuture
Threads 10: CompletableFutureThreads 10: CompletableFuture
Threads 10: CompletableFutureHelder da Rocha
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraCaelum
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Python com r (mini projeto)
Python com r (mini projeto)Python com r (mini projeto)
Python com r (mini projeto)Danilo Costa
 
Programação assíncrona com C# 5
Programação assíncrona com C# 5Programação assíncrona com C# 5
Programação assíncrona com C# 5Thiago Coelho
 
Spock Framework
Spock FrameworkSpock Framework
Spock FrameworkIsmael
 
Apresentação java io
Apresentação java ioApresentação java io
Apresentação java ioSilvino Neto
 

Mais procurados (19)

Invasaocom exploits
Invasaocom exploitsInvasaocom exploits
Invasaocom exploits
 
Seguranca informacao 1
Seguranca informacao 1Seguranca informacao 1
Seguranca informacao 1
 
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
 
01 notações iniciais
01   notações iniciais01   notações iniciais
01 notações iniciais
 
Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
02 configurando placa de rede
02   configurando placa de rede02   configurando placa de rede
02 configurando placa de rede
 
Threads 10: CompletableFuture
Threads 10: CompletableFutureThreads 10: CompletableFuture
Threads 10: CompletableFuture
 
Ruby
RubyRuby
Ruby
 
PHP 7
PHP 7PHP 7
PHP 7
 
Curso de Java: Threads
Curso de Java: ThreadsCurso de Java: Threads
Curso de Java: Threads
 
Dhcp com controle_ip_compartilhamento
Dhcp com controle_ip_compartilhamentoDhcp com controle_ip_compartilhamento
Dhcp com controle_ip_compartilhamento
 
Aula sockets
Aula socketsAula sockets
Aula sockets
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Python com r (mini projeto)
Python com r (mini projeto)Python com r (mini projeto)
Python com r (mini projeto)
 
PHP-CLI em 7 passos
PHP-CLI em 7 passosPHP-CLI em 7 passos
PHP-CLI em 7 passos
 
Programação assíncrona com C# 5
Programação assíncrona com C# 5Programação assíncrona com C# 5
Programação assíncrona com C# 5
 
Spock Framework
Spock FrameworkSpock Framework
Spock Framework
 
Apresentação java io
Apresentação java ioApresentação java io
Apresentação java io
 

Semelhante a Java SE Fundamentos Rede

Semelhante a Java SE Fundamentos Rede (20)

Redes 1 - Sockets em C#
Redes 1 - Sockets em C#Redes 1 - Sockets em C#
Redes 1 - Sockets em C#
 
RMI em Java
RMI em JavaRMI em Java
RMI em Java
 
Java recursos avançados - socket connection
Java   recursos avançados - socket connectionJava   recursos avançados - socket connection
Java recursos avançados - socket connection
 
Lab 06 ping_com_udp
Lab 06 ping_com_udpLab 06 ping_com_udp
Lab 06 ping_com_udp
 
Java Comunicação Serial
Java Comunicação SerialJava Comunicação Serial
Java Comunicação Serial
 
1089335456 paper 4 sockets em java
1089335456 paper 4   sockets em java1089335456 paper 4   sockets em java
1089335456 paper 4 sockets em java
 
Java 16 Jdbc
Java 16 JdbcJava 16 Jdbc
Java 16 Jdbc
 
Python CGI
Python CGIPython CGI
Python CGI
 
servlet-respostas
servlet-respostasservlet-respostas
servlet-respostas
 
M4 tarefa video
M4 tarefa videoM4 tarefa video
M4 tarefa video
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Apostila de-vb-net
Apostila de-vb-netApostila de-vb-net
Apostila de-vb-net
 
Web 2.0 e AJAX - Parte 2 / 3
Web 2.0 e AJAX - Parte 2 / 3Web 2.0 e AJAX - Parte 2 / 3
Web 2.0 e AJAX - Parte 2 / 3
 
Servlets
ServletsServlets
Servlets
 
Configuração Ethernet Wireless Linux
Configuração Ethernet Wireless LinuxConfiguração Ethernet Wireless Linux
Configuração Ethernet Wireless Linux
 
Manipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBCManipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBC
 
servlet-introducao
servlet-introducaoservlet-introducao
servlet-introducao
 
Curso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationCurso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web Application
 
02 - Fundamentos de Servlets
02 - Fundamentos de Servlets02 - Fundamentos de Servlets
02 - Fundamentos de Servlets
 

Mais de Denis L Presciliano

Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsDenis L Presciliano
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsDenis L Presciliano
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteDenis L Presciliano
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e ComposiçãoDenis L Presciliano
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoDenis L Presciliano
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Denis L Presciliano
 
Configuração do ambiente JEdit + Ant
Configuração do ambiente JEdit + AntConfiguração do ambiente JEdit + Ant
Configuração do ambiente JEdit + AntDenis L Presciliano
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em JavaDenis L Presciliano
 

Mais de Denis L Presciliano (20)

Funmentos de Objetos Remotos
Funmentos de Objetos RemotosFunmentos de Objetos Remotos
Funmentos de Objetos Remotos
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e applets
 
Classes internas
Classes internasClasses internas
Classes internas
 
Entrada e Saída
Entrada e SaídaEntrada e Saída
Entrada e Saída
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e Strings
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação Concorrente
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Interfaces e Porlimosfismo
Interfaces e PorlimosfismoInterfaces e Porlimosfismo
Interfaces e Porlimosfismo
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Pacotes e Encapsulamento
Pacotes e EncapsulamentoPacotes e Encapsulamento
Pacotes e Encapsulamento
 
Como criar classes e objetos
Como criar classes e objetosComo criar classes e objetos
Como criar classes e objetos
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxo
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2
 
Configuração do ambiente JEdit + Ant
Configuração do ambiente JEdit + AntConfiguração do ambiente JEdit + Ant
Configuração do ambiente JEdit + Ant
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
 
Introdução a tecnologia Java
Introdução a tecnologia JavaIntrodução a tecnologia Java
Introdução a tecnologia Java
 
J530 15 workshop
J530 15 workshopJ530 15 workshop
J530 15 workshop
 

Java SE Fundamentos Rede

  • 1. Java 2 Standard Edition Fundamentos de Helder da Rocha www.argonavis.com.br 1
  • 2. Sobre este módulo Este módulo pretende apenas cobrir conceitos essenciais sobre programação em rede com Java Como criar um servidor e um cliente TCP/IP Como abrir uma conexão TCP/IP Como ler de uma conexão Como escrever para uma conexão Classes abordadas do pacote java.net Socket e ServerSocket InetAddress URL Para maiores detalhes, consulte as referências no final do capítulo 2
  • 3. Pacote java.net O pacote java.net contém classes para implementar comunicação através da rede Fáceis de usar. Semelhante à criação de arquivos: Socket sock = new Socket("www.x.com", 80); PrintWriter os = new PrintWriter( new OutputStreamWriter( sock.getOutputStream())); BufferedReader is = new BufferedReader( new InputStreamReader( sock.getInputStream()); os.println("GET / HTTP/1.0nn"); String linha = ""; while ((linha = is.readLine()) != null) { System.out.println(linha); } // ... feche o socket com sock.close(); (1) (2) (3) (1) Abre socket para servidor Web, (2) envia comando e (3) imprime resposta 3
  • 4. TCP/IP no pacote java.net A comunicação via protocolo TCP (Transfer Control Protocol), confiável, é suportada pelas classes Socket (soquete de dados) ServerSocket (soquete do servidor). A comunicação via UDP (Unreliable Datagram Protocol), não-confiável, é suportada pelas classes DatagramSocket (soquete de dados UDP), DatagramPacket (pacote UDP) MulticastSocket (soquete UDP para difusão). Endereçamento InetAddress (representa um endereço na Internet) URL (representa uma URL) 4
  • 5. URL Representa uma URL Principais métodos openStream() obtém um InputStream para os dados openConnection(): retorna um objeto URLConnection que contém métodos para ler o cabeçalho dos dados getContent(): retorna os dados diretamente como Object se conteúdo for conhecido (texto, imagens, etc.) Para imprimir a página HTML de um site try { URL url = new URL("http://www.site.com"); InputStreamReader reader = new InputStreamReader(url.openStream()); BufferedReader br = new BufferedReader(reader); String linha = ""; while ( (linha = br.readLine()) != null) { System.out.println(linha); } } catch (MalformedURLException e) { ... } 5
  • 6. InetAddress Representa um endereço Internet Principais métodos estáticos construtores getLocalHost() retorna InetAddress getByName(String host) retorna InetAddress Principais métodos de instância getHostAddress() retorna String com IP do InetAddress getHostName() retorna String com nome no InetAddress Para descobrir o IP e nome da máquina local: InetAddress address = InetAddress.getLocalHost(); String ip = address.getHostAddress(); String nome = address.getHostName(); 6
  • 7. Socket Um dos lados de uma conexão bidirecional TCP Principais métodos servem para obter fluxos de entrada e saída getInputStream() getOutputStream() close() Exemplo InetAddress end = InetAddress.getByName("info.acme.com"); Socket con = new Socket(end, 80); InputStream dados = con.getInputStream(); OutputStream comandos = con.getOutputStream(); Depois de obtido os fluxos, basta ler ou enviar dados 7
  • 8. Socket (2) Para ler ou gravar caracteres ao invés de bytes, pode-se decorar os fluxos obtidos de um socket com as classes Reader e Writer: Socket con = new Socket("maquina.com.br", 4444); Reader r = new InputStreamReader( con.getInputStream()); Writer w = new OutputStreamWriter( con.getOutputStream()); // Use aqui os fluxos de dados con.close(); 8
  • 9. ServerSocket Com ServerSocket pode-se implementar um servidor que fica escutando uma porta a espera de um cliente Principal método accept(): aceita a conexão e retorna o seu socket Exemplo de servidor dedicado ServerSocket escuta = new ServerSocket(80); while(true) { Socket cliente = escuta.accept(); // espera InputStream comandos = cliente.getInputStream(); OutputStream dados = cliente.getOutputStream(); // ... use os dados cliente.close(); } 9
  • 10. Exceções de rede Várias exceções podem ocorrer em um ambiente de rede O programa deve tomar medidas para reduzir o impacto das exceções inevitáveis, como rede fora do ar ou conexão recusada O compilador irá informar, durante o desenvolvimento, as exceções que precisam ser declaradas ou tratadas As exceções mais comuns do pacote java.net são SocketException MalformedURLException UnknownHostException ProtocolException Operações de timeout, liberação de threads, sincronização, transações, etc. devem ser implementados pelo programador em aplicações de rede Não há exceções tratando esses problemas automaticamente 10
  • 11. Exercícios 1. Escreva um programa que descubra e imprima o número IP da sua máquina 2. Escreva um programa que Conecte-se na porta HTTP (geralmente 80) de um servidor conhecido Envie o comando: "GET / HTTP/1.0nn" Grave o resultado em um arquivo resultado.html 3. Servidor dedicado: escreva um servidor simples que responda a comandos da forma "GET arquivo". Localize o arquivo e imprima-o no OutputStream Escreva um cliente que receba o arquivo e grave-o localmente 11
  • 12. Exercícios (2) 4. Servidor multithreaded: Escreva um programa que use um ServerSocket para aguardar conexões de um cliente. O programa deverá ter duas partes: (1) uma classe principal (Servidor) que fica escutando a porta escolhida (número acima de 1024) e (2) uma classe que estende Thread (Conexao) e que irá tratar as requisições do cliente. O servidor deverá imprimir na tela todos os comandos enviados por todos os clientes. Os clientes enviam mensagens de texto, como um chat. 5. Crie um cliente para a aplicação acima e teste-o em várias máquinas diferentes. 12
  • 13. Curso J100: Java 2 Standard Edition Revisão 17.0 © 1996-2003, Helder da Rocha (helder@acm.org) argonavis.com.br 13