View
5
Download
0
Category
Preview:
Citation preview
SocketsBruno GuimarãesLucas Rossini
Introdução● Comunicação entre processos:
○ Memória compartilhada○ Memória distribuída - Mensagens pela rede
● Um sistema distribuído é ausente de memória compartilhada, toda comunicação é feita por troca de mensagens.
● Troca de mensagens entre A e B:○ A cria a mensagem e despacha para o SO enviá-la○ Mensagem é binária, logo A e B deve concordar no
significados dos bits
Modelo ISO OSI● Questões:
○ Quantos volts para bit zero, e para bit um?○ Como será o último bit?○ Como dizer se a mensagem está danificada?
● Foi criado um modelo em camadas para identificar níveis e serviços.
● 7 camadas:○ Física○ Enlace○ Rede○ Transporte○ Sessão - Apresentação - Aplicação
1ª definição"Socket é a interface entre a camada de
aplicação e a camada de transporte"
Tipos de comunicação● Persistente
○ Não há a necessidade do remetente e destinatário estarem ligados no momento do envio/recebimento.
○ Há uma camada middleware que irá armazenar a mensagem.
○ Exemplo: serviço de e-mail.
● Transiente○ Mensagem fica ativa durante o tempo de aplicação.
Tipos de comunicaçãoAssíncrona
○ Remetente cria a mensagem e "apresenta" para o SO.
○ Remetente NÃO é bloqueado.
Síncrona○ Após o remetente ter criado a mensagem podem
ocorrer três momentos na qual ficará bloqueado:1. Até o momento que a camada inferior captura a mensagem2. Até que o receptor receba a mensagem3. Até que o receptor processe a mensagem
Tipos de comunicaçãoDiscreto
○ A mensagem é uma unidade completa.
Fluxo○ Há um conjunto de mensagens relacionadas por
uma certa ordem.
2ª definição ● É um terminal de comunicação baseada em
mensagens para o qual uma aplicação pode escrever e ler dados da rede.
● As informações são strings de bytes sem significado aparente.
2ª definição● Implementa uma porta de comunicação entre um
processo da camada de aplicação e um protocolo da camada transporte.
Tipo de conexão● Datagram sockets
○ Connectionless sockets○ User Datagram Protocol (UDP)○ Transmite pacotes
● Stream sockets○ Connection-oriented sockets○ Transmission Control Protocol (TCP)○ Cria uma conexão com outro processo
Interface Berkeley● Também conhecido como BSD Socket, é a API de fato
para programação.● Veio do padrão POSIX.● Esta API é provida pelo SO, e assim permite os
programadores controlar e utilizar os sockets.● Todos os sistemas operacionais modernos tem alguma
implementação da interface de socket Berkeley.● Se tornou o padrão de interface para conexão com a
Internet, pois é uma implementação original para TCP/IP.
● Há outras interfaces como a Winsock para Windows, muito parecida com a de Berkeley.
Funções da API● socket_create(dominio, protocolo)
○ Cria um novo terminal.○ SO reserva recursos para atender envio e
recebimento.○ Retorna um socket resource em caso de sucesso.○ Tipos de dominio:
■ IPv4■ IPv6
○ Tipos de protocolo da comunicação:■ Stream (TCP) - Connectionless■ Datagrama (UDP) - Connection-oriented
Funções da API● socket_bind(socket, endereço, porta)
○ Associa um endereço com o socket.○ Local Socket Address.○ Lado servidor.
● socket_listen(socket, numMax) ○ Para orientado a conexão.○ Não bloqueante.○ SO reserva buffer para o nº de conexões.
Funções da API● accept(socket)
○ É bloqueante até chegar uma nova conexão.○ Aceita conexões vindas neste socket. ○ Uma vez que uma conexão com sucesso é feita, é
criado um novo socket (Remote Socket Address) com as mesmas propiedades do original que deve ser usado para comunicação.
Funções da API
Funções da API● connect(socket)
○ Especifica um endereço.○ Bloqueia até a conexão estiver estabelecida.
● send()● receive()
Java● A API sockets BSD é escrita em linguagem
C. A maioria das outras linguagens provêm uma interface similar, escrita como um wrapper baseado na API.
● Está localizado no pacote java.net
PHP● PHP é bem "equipado" para tratar sockets● A extensão socket implementa uma interface de
baixo nível para funções de comunicação entre sockets baseadas no popular BSD sockets, podendo acionar como um servidor socket ou como um cliente.○ --enable-sockets à linha de comando
configure.○ Descomentar ;extension=php_sockets.dll no
php.ini
Servidor● Processo que espera ser contactado.● É associado a uma porta particular, e fica
escutando requisições naquela porta e respondendo.
● Servidores de email (POP3, SMTP) e servidores WEB são bons exemplos. O servidor HTTP escuta (na porta 80) requisições e serve de volta o HTML e outros arquivos.
Programando o servidor1. Criar um ServerSocket
a. ServerSocket server = new ServerSocket(port);
b. numPorta - Ponto de handshake2. Espera conexão
a. Socket connection = server.accept();b. Objeto Socket - Gerencia a conexão com cliente
3. Obtem fluxo de E/S do socketa. connection.getOutputStream();b. Objeto OutputStream e InputStream
4. Processamento5. Fechar conexão no fluxo e sockets
Programando o cliente1. Cria um socket
Socket socket = new Socket (ip, porta);
2. Obtém fluxo de E/Snew DataOutputStream(socket.getOutputStream());
3. Processamento4. Fecha conexão
Compatibilidade● Java ultilizamos br.readLine() != null
○ Lê até EOL■ socket_write($socket, $texto . "\n", strlen
($texto) + 1)
○ Função só retorna null quando socket cliente é fechado.
● Modo de leitura do PHP○ PHP_BINARY_READ - \0○ PHP_NORMAL_READ - \n
Quais os tipos de conexão em Sockets? O que as caracteriza?
● Connection-oriented X Connectionless○ Depende de como aplicação deseja.○ Temos dois tipos de serviços de transporte via
socket:■ O confiável orientado a cadeia de bytes (byte
stream) utilizando TCP.■ Datagramas não confiáveis. Utilizando o
protocolo UDP.
Cite 5 funções da API Sockets e explique sua funcionalidade.
● Principais funções da API○ socket();
○ bind();
○ listen();
○ accept();
○ connect();
○ send();
○ receive();
Explique em linhas gerais o que deve ser feito para implementar uma aplicação servidora que atenda a vários clientes simultaneamente através de uma porta Socket.
● A API socket prevê esta funcionalidade.● A aplicação servidora cria um Local Socket,
e quando ocorre a conexão retorna um Remote Socket.
● Neste ponto pode ocorrer um fork(), ou uma programação com threads na qual uma linha escuta infinitamente por novas requisições e a outra processa a requisição.
Referências● Java in Distributed Systems: Concurrency,
Distribution and Persistence - Marko Boger● Sistemas Distribuídos - ANDREW S. TANENBAUM ● http://php.net/manual/pt_BR/book.sockets.php● http://en.wikipedia.org/wiki/Berkeley_sockets
Recommended