Professional Documents
Culture Documents
O lado do Cliente
Prof. Ricardo Linden
Mquina
Cliente
Pe
di
do
Re
sul
tad
o
Rede
Programa
Servidor
Mquina
Servidora
Definio do Modelo
O programa servidor aceita pedidos de dados/servios por parte dos
programas clientes e retorna os resultados para estes usarem.
Servidores podem se encaixar em vrias categorias:
Servidores de arquivos
Servidores de bancos de daos
Servidores de comunicao
Servidores de vdeo
SQL *Net
TCP/IP
Outros
SQL *Net
TCP/IP
S Q L*
Forms
ORACLE
Cliente
Comea primeiro
Comea depois
Ativamente
contata
servidor com um pedido.
Responde a pedidos
Terminologia
Servidor
Um programa executado que aceita contatos atravs de uma rede
e presta algum tipo de servio
computador de classe de servidor (server-class)
Hardware potente o suficiente para executar um servidor.
Informalmente
O termo servidor frequentemente usado para definir o
computador.
Caractersticas de um cliente
Aplicativo arbitrrio
Torna-se cliente temporariamente
Pode realizar outras computaes
Chamado diretamente pelo usurio
Executa localmente no computador do usurio
Inicia contato ativamente com o servidor.
Contacta um servidor de cada vez.
Protocolo
Uma descrio formal de formatos de mensagens e das regras que
duas ou mais mquinas devem seguir para poder comunicar-se.
Ol
TCP connection
req.
Ol
TCP connection
reply.
Get http://gaia.cs.umass.edu/index.htm
2:00
<file>
tempo
Camadas TCP/IP
Protocolos de rede sp desemvolvidos em camadas
Uma sute de protocolos como o TCP/IP uma combinao de
protocolos em vrias camadas
Importante : cada camada tem seu protocolo!
FTP cliente
Servidor
server
FTP
FTP
server
(Nvel de preocupao dos usurios)
Transporte
TCP
(Comunicao Ponto-a-Ponto)
TCP
Rede
IP
IP
(roteamento)
Enlace
IP
IP
Ethernet Ethernet
EthernetEthernet
Driver Driver (Device Driver e Driver Driver
placa de rede)
A Interface Sockets
A API Sockets de Berkeley
Originalmente desenvolvida como parte do Unix BSD
BSD = Berkeley Software Distribution
API=Application Program Interface
A Interface Sockets
Internet
file.dat
Endereo Internet
Cada interface na internet deve ter um Endereo Internet, ou
Endereo IP nico.
Um endereo IP um nmero de 32 bits.
Ele usualmente escrito usando a notao decimal com pontos.
Exemplos:
2365328673 um inteiro sem sinal que equivale a
1000 1100 1111 1100 0000 1101 0010 0001 em binrio
140
33
8C FC 0D 21 em hexadecimal
140.252.13.33 em notao decimal com pontos
A aparncia deste nmero bem diferente da do
primeiro pois este nmero pega cada 8 bits do
nmero binrio e transforma em um nmero
decimal
DNS
gloin.cis.udel.edu
128.175.201.5
Nmero de Porta
Podemos fazer uma analogia entre o nmero da porta de um aplicativo e o
nmero do apartamento de uma pessoa.
O endereo do cmputador (hostname) onde roda o servidor, em contrapartida,
o nmero do prdio.
O porteiro do prdio, ao receber correspondncias, deve ler no envelope delas
o apartamento para o qual deve destin-las. Se tudo correr bem, todos os
apartamentos s recebero as correspondncias a eles destinados.
A porta serve o mesmo propsito de discriminao, s que entre aplicativos.
A pilha de comunicao
Na prtica, como se funcionasse da seguinte maneira:
Cliente
Servidor
socket
socket
portas
portas
TCP/UDP
TCP/UDP
IP
IP
O que so Sockets
Modelo cliente servidor: o cliente usa um servio provido pelo servidor
TCP prov um servio de comunicao confivel, ponto-a-ponto para
aplicaes cliente servidor
Um socket um dos lados de um elo de comunicao bilateral entre
dois programas rodando na rede.
Um socket est ligado a um nmero de porta de forma que a camada
TCP possa identificar a aplicao para quem o dado deve ser enviado.
Conexo Estabelecida
Se o servidor aceita a conexo ele liga o novo socket a uma
porta diferente.
Ele precisa de um novo socket para esta comunicao
especfica pois precisa continuar escutando o socket anterior
para receber novas conexes.
Um servidor...
A maioria dos servidores constituda de aplicativos multitarefas.
Isto significa que eles podem atender s requisies de mltiplos
clientes ao mesmo tempo.
Logo, enquanto eles atendem um cliente precisam continuar
prestando ateno ao socket original de forma a saber quando
chegarem outras requisies de novos clientes.
Simplificando
Entretanto, este processo totalmente transparente para o processo
usurio.
Pense em uma comunicao via sockets como similar quela feita
com duas latinhas e um barbante.
Se o outro lado mover a latinha dele, ainda assim voc escutar e
falar da mesma maneira.
No percebe nenhuma diferena
Cliente
Servidor
O encanamento do socket
Passos bsicos
Abrindo um socket
Sockets so representados em Java pela classe Socket.
O construtor mais usado nesta classe o seguinte:
Socket(String Hostname, int Port)
Um exemplo de uso deste construtor :
Socket meuSocket = new
Socket(meuhost.com.br, 20000)
Mquina onde roda o servidor
(endereo solvel por DNS)
Excees
O construtor da classe socket pode lanar duas excees:
UnknownHostException : quando no reconhece o host
IOException : quando tem problemas genricos em criar o socket
Logo, tudo que fizermos com isto deve ser feito dentro de um bloco try. Exemplo:
Socket MyClient;
try {
MyClient = new Socket(host", PortNumber);
}
catch (UnknownHostException e) {
System.out.println(Nao consigo resolver o endereo);
} catch (IOException e) {
System.out.println(e);
}
Notas de Java
O socket tem que ser definido for a do bloco try, seno gera um erro
de compilao.
O bloco catch de UnknownHostException tem que vir antes do
bloco catch de IOException, seno nunca ser referenciado.
Hierarquia de classes:
Object
Throwable
Exception
IOException
UnknownHostException
Mandando dados
Agora estamos prontos para mandar dados para o servidor.
Isto feito atravs dos mtodos print e println da classe
PrintWriter.
Ao fim da escrita, temos que dar um flush na stream.
Exemplo:
outData.println("<curso>Aplic</curso><nota>10</nota>");
outData.flush();
Lendo dados
Agora podemos ler os dados com os mtodos read e readline da
classe BufferedReader.
Ao fim da entrada, a string lida ser igual a null, o que permite
identificar o fim da entrada.
Exemplo:
while((line=inData.readLine()) !=null) {
System.out.println(line);
}
Terminando
Ao fim de nossa leitura, devemos fechar a stream de entrada com o mtodo
close()
inData.close();
O mesmo deve ser feito com o socket de sada.
outData.close();
Igualmente fechamos o socket ao fim de toda comunicao gerada.
s.close();
O servidor percebe o fim do cliente recebendo uma mensagem de tamanho
zero (ou uma string nula).
Cliente Exemplo
import java.io.*;
import java.net.*;
import javax.swing.*;
public class meuCliente {
public static void main(String args[]) {
try {
String mensagem,line;
Socket s=new Socket("d11-8", 20000);
s.setSoTimeout(1000);
BufferedReader inData=new BufferedReader(new
InputStreamReader(s.getInputStream()));
PrintWriter outData=new PrintWriter(
s.getOutputStream());
outData.println("Mensagem de conexao");
outData.flush();