O paradigma de programação distribuída através da separação das aplicações entre servidores (aplicações que disponibilizam algum serviço) e clientes (aplicações que usam esses serviços) foi a arquitetura de distribuição predominante nos anos 1990. Um dos seus atrativos é o aumento da confiabilidade (a falha de uma máquina não necessariamente inviabiliza a operação do sistema como um todo) e redução de custo (máquinas mais simples podem executar os serviços isoladamente, ao invés de ter uma grande máquina fgazendo todos os serviços).
As aplicações clientes e servidoras são programas executando em máquinas distintas, trocando informação através de uma rede de computadores. Para que os serviços possam ser solicitados, a aplicação cliente deve conhecer quem fornece o serviço (o endereço da aplicação servidora) e qual o protocolo pré-estabelecido para realizar a solicitação.
Entre as vantagens citadas para o modelo de programação cliente-servidor destacam-se:
Relaciona a execução de processos distintos.
Oferece uma estruturação do processamento distribuído baseado no conceito de serviços:
Servidor: provedor de serviços
Cliente: consumidor de serviços
Permite compartilhamento de recursos
Servidor pode atender a vários clientes
Oferece transparência de localização
Tratamento uniforme independentemente de processos estarem na mesma máquina ou em máquinas distintas
Permite a comunicação através da troca de mensagens
Arquitetura fracamente acoplada
Mensagens para solicitações (cliente para servidor) e respostas (servidor para cliente)
Encapsula serviços
Cliente não precisa saber como servidor implementa o serviço, mas apenas a interface para solicitação e resposta.
Estaremos estudando aqui como Java oferece e simplifica o suporte a esse tipo de programação através das funcionalidades do pacote java.net. A partir da apresentação de alguns conceitos preliminares, apresenta-se os fundamentos Java para criar aplicações distribuídas usando os mecanismos de TCP/IP, UDP e HTTP.