Escolar Documentos
Profissional Documentos
Cultura Documentos
ndice
Introduo ....................................................................................................................... 4
1.
Conceitos .................................................................................................................. 5
2.
3.
4.
Protocolo TCP.................................................................................................... 7
4.2.
4.3.
6.
7.
6.1.
6.2.
SingleThreaded ................................................................................................ 14
6.3.
MultiThreaded ................................................................................................. 16
6.4.
Cliente .............................................................................................................. 16
7.2.
Concluso ...................................................................................................................... 20
Bibliografia................................................................................................. 21
Figuras
Figura 1 - Protocolo de comunicao entre o cliente e o servidor ............................... 11
Figura 2 - Estrutura dos projetos. ................................................................................. 12
Figura 3 - Classe implementa a interface serializable .................................................. 13
Figura 4 - Servidor fica a esperar a ligao .................................................................. 17
Figura 5 - Aplicao cliente est a iniciar .................................................................... 17
Figura 6 - Servidor, A ligao estabelecida, usando endereo local 127.0.0.1, escuta na
porta 6192, porta local de 8090 ................................................................................... 17
Figura 7 - Cliente solicitou o existe no servidor, o servidor devolve o tamanho do
ficheiro e a mensagem de confirmao, de seguir copia 25 bytes e guardando no seu
disco local e programa termina. ...................................................................................... 18
Figura 8 - o Servidor fica esperando outro pedido. ...................................................... 18
Figura 9 - Cliente solicita um ficheiro que no exista no servidor ............................... 18
Figura 10 - Servidor Multithreaded a ligao estabelecida com cliente 1, endereo
local, porta 6231, localport 8090. ................................................................................... 19
Figura 11 - Transferncia de ficheiro de servidor para o cliente .................................. 19
Figura 12 - Ligao estabelecida com Cliente 1 e Cliente 2 ........................................ 19
Introduo
Obviamente, estamos utilizando alguma variante de aplicao Cliente e
Servidor, onde parte do processamento dos dados feito do lado do cliente
utilizadores que pretendam obter as informaes desejadas e a parte processamento do
lado do servidor geralmente um computador que capaz de processar grande
quantidade de informao, atender vrios os pedidos de clientes. Em alguns casos
poderemos ter a relao um cliente para um servidor, vrios clientes para um servidor,
vrios servidores para um cliente. Em todos este caso podemos supor que os
computadores esto conectados via rede local ou internet.
1. Conceitos
Alguns conceitos, devemos compreender so listados a seguir:
Servio uma aplicao sendo executado no servidor. Para cada tipo de servio
poder ser ter um tipo de cliente especfico, capaz de efetuar a comunicao de
forma adequada.
2. Requisitos da Aplicao
O requisito de uma aplicao pode ser definido como uma condio ou
capacidade que o programa deve possuir, para que os utilizadores possam resolver
um determinado problema ou atingir um objetivo. Para isso, esta aplicao deve ter
os seguintes requisitos funcionais para o servidor e cliente respetivamente:
Servidor
Cliente:
Terminar a ligao;
3. Estado da Arte
O desenvolvimento desta aplicao para terem sucedido, devemos ter alguns dos
seguintes conhecimentos tcnicos:
4.1.
Protocolo TCP
Segmentos
o Na camada de transporte, o TCP agrupa determinado nmeros de bytes em
pacotes de dados, designados por segmentos;
o O TCP acrescenta um cabealho a cada segmento para que possa controlar
entrega o segmento para a camada IP para sua transmisso.
o Os segmentos so encapsulados em datagramas IP e transmitidos.
4.2.
Operaes da UDP
o Servio sem conexo significa que cada datagrama de utilizador enviado
pelo protocolo UDP datagrama independente ou seja no existe nenhuma
relao entre diferentes datagramas de utilizador, mesmo que se forem
provenientes do mesmo processo de origem e tiveram o mesmo programa de
destino. Os datagramas no so enumerados e no existe mecanismo para
estabelecer e ou terminar uma conexo virtual.
o Controlo de Fluxo e de erros: no implementa controlo de fluxo e portanto,
nenhum mecanismo de janela (window). O recetor pode ser inundado com
um nmero excessivo de mensagem que chegam a ele. No implementa
mecanismo controlo de erro exceto checksum, isto o emissor no sabe se
uma mensagem foi perdida ou duplicada. Quando o recetor deteta um erro
por meio do checksum, o datagrama de utilizador descartado de forma
imperceptivel.
Uso de UDP
o A UDP usada em alguns protocolos de roteamento para atualizao de
rotas como o RIP (Routing Infomation Protocol).
o Adequado para um processo que requeira comunicao solicitao simples
com pouca preocupao com controlo de erros e de fluxos de dados.
o Utilizado na gesto de redes.
4.3.
SingleThreaded e MultiThreaded
Antes de irmos abordar sobre singlethreaded e multithreaded, vamos apresentar
SingleThread/ MonoThread
No ambiente de programao singleThread, um processo suporta apenas um
programa no seu espao de endereamento e apenas uma instruo do programa
executada.
Relaciona-se ao cliente e servidor. Normalmente vrios clientes podem fazer
pedido ao mesmo tempo para um determinado servidor. O servidor ento pode atender
um cliente por vez e outros clientes tem que esperar. Este cenrio designado
singletheaded ou servidor no concorrente.
MultiThreaded
Para diminuir o tempo gasto na criao ou eliminao de subprocesso, bem como
economizar recursos computacionais, foi introduzido o conceito de thread. No ambiente
multithread,
cada
processo
pode
responder
vrias
solicitaes
mesmo
simultaneamente. O processo neste ambiente tem pelo menos uma thread de execuo,
podendo compartilhar o seu espao de endereamento com vrios threads, que podem
ser executados de modo concorrente no caso de mltiplos processadores.
As vantagens: so necessrios poucos processo para realizar a mesma tarefa.
O servidor multithread ou servidor concorrente deve ser capaz de atender vrios clientes
simultaneamente.
Modelo de Interao
O paradigma para interao entre cliente e servidor. Um lado do sistema assume papel
de executar um servio (servidor) e outro lado faz pedido a execuo de um servio
(cliente).
10
4.4.
Cliente
Incio
Servidor
Incio
Solicita a ligao
Esperar a ligao
Estabelecer a ligao
Envia nome do
ficheiro pretendido
Directory do
ficheiro
Pesquisar nome do
ficheiro
Se
Existe, envia
sim, filesize
No existe
Envia o centedo do
ficheiro
Termina a ligao
5. Proposta da soluo
1. Iniciar o servidor, fica espera de pedidos de ligao;
2. O cliente faz pedido de ligao, enviando nome do ficheiro, aguardando a
confirmao da existncia do ficheiro e o tamanho do ficheiro. Caso no o exista
no servidor, servidor envia uma notificao ao cliente diz no existe o ficheiro e
o programa cliente termina a ligao;
3. Caso exista o ficheiro, O cliente dever solicitar os blocos de dados do ficheiro,
guardando-o no seu disco local;
4. O servidor dever enviar os blocos de dados ao cliente;
5. Para ter maior eficincia, o servidor dever enviar o contedo do ficheiro de n
bytes por cada bloco;
6. O cliente ler n bytes e guardando-o no ficheiro no seu disco local.
7. A ligao dever ser terminada
6. Implementao da Aplicao
Na prtica criamos trs projetos so cliente, servidor e objetos remoto (classe
implementada a interface serializable). Como vimos a estrutura dos projetos na
figura 1
12
6.1.
Para que instncias de classe FicheiroRemoto possam ser enviada e recebidas por
servidores e cliente precisa que sejam serializveis. Para isto, devemos declarar a
classe como implementando o interface serializable.
A classe FicheiroRemoto tem vrios methods so:
o Mtodo para confirmar a existncia de ficheiro;
o Mtodo para devolver o tamanho do ficheiro, blocos de dados,
Servidor
Basicamente o servidor singlethreaded e multithreaded tem a implementao
semelhante, h diferena que singlethreaded apenas um cliente por vez pode se
conectar ao servidor enquanto o servidor multithreaded permite vrios clientes podem
estar ligados ao mesmo tempo no servidor.
13
6.2.
SingleThreaded
O servidor singlethreaded tem dois mtodos. O mtodo main() que representa o fluxo
principal do servidor e mtodo processConnection(Socket con) ser responsvel por
processar uma nica conexo com um cliente.
O mtodo main() cria uma instancia de ServerSocket que ser responsvel por esperar a
ligao do cliente, tambm contem um ciclo infinito while(true) onde o servidor ficar
aguardar a ligao do cliente. Quando um cliente se conectar a este servidor, o mtodo
accept() da classe ServerSocket criar uma instncia de Socket para a efetuar a
comunicao com cliente, e prosseguir a execuo do lado do servidor.
Assim quando uma ligao do cliente for aceita, o mtodo processConnection(Socket
con) ser executado usando como argumento a instncia recm criada da classe Socket,
corresponde conexo com cliente. No mtodo main() ainda temos os blocos cathc()
responsveis pelo processamento das excees que podem ocorrer neste mtodo.
BindException que ser executado caso o endereo desejado j esteja em uso por outro
servio e IOException que ser criada caso ocorra algum erro de entrada ou sada.
14
executa
aps
mtodo
accept()
executado.
mtodo
pedido, enviando-os para o cliente. Para maior eficincia, vamos ler e enviar os dados
em blocos de 25 bytes.
private void processConnection(Socket con)
{
String pasta = "C:/Origem";
File dir = new File(pasta);
ObjectInputStream serverInstream = null;
ObjectOutputStream serverOutstream = null;
try
{
serverInstream = new ObjectInputStream(con.getInputStream());
serverOutstream = new ObjectOutputStream(con.getOutputStream());
DataOutputStream dos = new DataOutputStream(con.getOutputStream());
fr = (FicheiroRemoto) serverInstream.readObject();
fr.existFile(fr.getFileName(), dir);
serverOutstream.writeObject(fr); // server Sends objects to client
// Abrir o ficheiro local
if(fr.exisFile())
{
File select = new File(fr.getAbsPathFile());
DataInputStream inLocal = new DataInputStream(new
FileInputStream(select));
// para maior eficient vamos ler ou enviar os blocos de dados de 25 bytes.
byte[] arrayInBytes = new byte[fr.getDatainBytes()];
while(true)
{
// tentamos ler at 25 bytes do ficheiro
int result = inLocal.read(arrayInBytes, 0, fr.getDatainBytes());
if( result == -1) break;
// Escreve apenas os bytes lidos
dos.write(arrayInBytes, 0, result);
}
15
6.3.
MultiThreaded
6.4.
Cliente
16
Servidor SingleThread
Servidor
Cliente:
Servidor:
17
Cliente:
Servidor:
Cliente:
18
7.2.
Servidor MultiThreaded
Cliente:
Servidor:
19
Concluso
20
Bibliografia
Elliotte Rusty Harold, Java Network Programming, 4th Ed.;
Paul Deitel, Harvey Deitel, Java How To Program 9th Ed.
https://pt.wikipedia.org/wiki/User_Datagram_Protocol
https://pt.wikipedia.org/wiki/Transmission_Control_Protocol
https://gist.github.com/CarlEkerot/2693246
http://www.java2s.com/Code/Java/NetworkProtocol/ServerSocketandSocketforSerializableobject.htm
http://beginnersbook.com/2013/03/multithreading-in-java/
21