Sockets Bruno Guimarães Lucas 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ção Assíncrona Síncrona Remetente cria a mensagem e "apresenta" para o SO. Remetente NÃO é bloqueado. 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 mensagem 2. Até que o receptor receba a mensagem 3. Até que o receptor processe a mensagem
Tipos de comunicação Discreto 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 servidor 1. Criar um ServerSocket a. ServerSocket server = new ServerSocket (port); b. numporta - Ponto de handshake 2. Espera conexão a. Socket connection = server.accept(); b. Objeto Socket - Gerencia a conexão com cliente 3. Obtem fluxo de E/S do socket a. connection.getoutputstream(); b. Objeto OutputStream e InputStream 4. Processamento 5. Fechar conexão no fluxo e sockets
Programando o cliente 1. Cria um socket Socket socket = new Socket (ip, porta); 2. Obtém fluxo de E/S new DataOutputStream(socket. getoutputstream()); 3. Processamento 4. 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