Sockets permitem a comunicação entre sistemas através de protocolos como TCP e UDP. Portas definem os serviços em cada máquina e clientes/servidores usam requisições e respostas para transferir dados, geralmente serializados em bytes.
Protocolo
● É um meio pelo qual é estabelecida a comunicação entre
dois pontos ou mais em um determinado contexto
● É uma convenção que controla e possibilita uma conexão,
comunicação, transferência de dados entre dois sistemas
computacionais
● Exemplos: TCP, UDP, HTTP, FTP, SSH, TELNET, SMTP,
etc
3.
Portas
● Diversos computadores se conectam com um processo
● Diversos processos se comunicam com um computador
● Portas definem que tipo de serviço funcionará em
determinada máquina
● Portas são numeros inteiros entre 0 e 65535
4.
Cliente/Servidor
● Cada instância de um cliente pode enviar requisições de
dado para algum dos servidores conectados e esperar pela
resposta
● Servidores podem aceitar tais requisições, processá-las e
retornar o resultado para o cliente
● Apesar do conceito ser aplicado em diversos usos e
aplicações, a arquitetura é praticamente a mesma
5.
Servidor
● Para o uso de um serviço remoto (em outra máquina) é
preciso que esse serviço seja disponibilizado por uma porta
● A API java.net do java tem ferramentas que auxiliam o uso
da comunicação via sockets
6.
Cliente
● Para consumir um serviço remoto (servidor) é necessario
enviar uma requisição para uma porta em uma determinada
máquina remota
● Novamente o API java.net também tem suporte para o
consumo de serviços remotos
7.
Streaming
● Mas como receber/enviar as requisições e receber as
respostas?
● Assim como vimos na aula de IO, os dados são
transmitidos via streaming.
8.
Serialização
● Serialização de Objetos, permitem que os mesmo sejam
representados por uma sequencia de bytes, que contém os
dados de um objeto, seus tipos e valores
● ObjectInputStream e ObjectOutputStream, são classes de
straming de alto nivel que lidam com a serialização e
deserialização de objetos
● Para que um objeto possa ser serializado, ele deve
implementar a interface java.io.Serializable