• Nenhum resultado encontrado

4-Sockets

N/A
N/A
Protected

Academic year: 2021

Share "4-Sockets"

Copied!
30
0
0

Texto

(1)

Sumário

Telecomunicações

Sistemas Distribuídos

SOA / Web Services

(2)

Programação de Sockets

O que é um Socket

Uma interface

local

criada e

mantida pelas aplicações,

controlada pelo SO

, através

da qual os processos de

aplicação podem tanto

enviar

quanto

receber

mensagens

de outro processo de

aplicação, local ou remoto.

De acordo com James F Kurose: “socket é a interface entre a camada de aplicação e a de transporte

(3)

Programação de Sockets

API de Sockets:

introduzida no UNIX BSD 4.1,1981

explicitamente criados, usados e

liberados pelas aplicações

paradigma cliente/servidor

dois tipos de serviço de transporte via

sockets:

datagrama não confiável (UDP)

confiável, orientado a cadeias de bytes / stream (TCP)

(4)

Programação de Sockets

TCP

Orientado a conexão Controle de erro Garantia de entrega Entrega ordenada

TCP

Orientado a conexão Controle de erro Garantia de entrega Entrega ordenada

UDP

Não necessita de conexão Sem controle de erro Mais simples e mais rápido

UDP

Não necessita de conexão Sem controle de erro Mais simples e mais rápido

(5)

Programação de Sockets

Tipos de Sockets:

• Serviço com conexão

 Implementa um stream de dados (SOCK_STREAM)

 Protocolo TCP (tipicamente)

• Serviço sem conexão

 Implementa um serviço de datagramas (SOCK_DGRAM)

 Protocolo UDP (tipicamente)

(6)

Programação de Sockets

socket

Cria um novo descritor para comunicação

connect

Iniciar conexão com servidor

write

Escreve dados em uma conexão

read

Lê dados de uma conexão

close

Fecha a conexão

bind

Atribui um endereço IP e uma porta a um socket

listen

Coloca o socket em modo passivo, para “escutar” portas

accept

Bloqueia o servidor até chegada de requisição de conexão

recvfrom

Recebe um datagrama e guarda o endereço do emissor

sendto

Envia um datagrama especificando o endereço Principais funções da API

(7)

Programação de Sockets

Números de portas:

• 1-255 reservadas para serviços padrão

portas

“bem conhecidas”

• 256-1023 reservado para serviços Unix

• 1-1023 Somente podem ser usadas por usuários

privilegiados (super-usuário)

• 1024-4999 Usadas por processos de sistema e de usuário

• 5000- Usadas somente por processos de usuário

(8)

Programação de Sockets

Uma analogia

Socket:

telefone

Bind:

número de telefone atribuído a um telefone

Listen:

ligar a campainha para que você possa ouvir o

telefonema

Connet:

discar um número de telefone

Accept:

atender o telefone

Read/Write:falar / conversar

Close:

despedir e desligar

(9)

Programação de Sockets

Para Cliente contatar o servidor:

• processo servidor já deve estar executando antes de ser

contatado

• servidor deve ter criado socket (porta) que aceita o contato do Cliente

Quando o cliente cria o socket: cliente TCP estabelece conexão com o servidor

Quando contatado pelo cliente, o

servidor cria um novo socket para comunicar-se com o cliente

• permite que o servidor converse com múltiplos clientes

Ponto de vista da aplicação

TCP fornece uma transferência confiável, em ordem de bytes

(“pipe”), entre o cliente e o servidor

Ponto de vista da aplicação

TCP fornece uma transferência confiável, em ordem de bytes

(“pipe”), entre o cliente e o servidor

Cliente contata o servidor:

• criando um socket TCP local • especificando endereço IP e

número da porta do processo servidor

(10)

Programação de Sockets

close () listen () bind () socket () accept () read () write ()

Servidor

socket ()

Cliente

connect ()

bloqueado Estabelecimento de conexão

write () read () close () Dados (pedido) Dados resposta) ter telefone associar número ao telefone ligar campainha atender chamada desligar conversar fazer chamada desligar conversar

(11)

Programação de Sockets

Programação de Sockets com TCP

Exemplo de aplicação cliente/servidor: • cliente lê linha da entrada padrão do

sistema (stream inFromUser) e envia para o servidor via socket (stream outToServer); • servidor lê linha do socket;

• servidor converte linha para letras maiúsculas e envia de volta ao cliente; • cliente lê a linha modificada a partir do

(12)

Programação de Sockets

In

te

ra

çã

o

C

li

en

te

/S

er

vi

d

o

r:

T

C

P

(13)

Programação de Sockets

E

x

em

p

lo

:

C

li

en

te

J

av

a

(T

C

P

)

(14)

Programação de Sockets

E

x

em

p

lo

:

C

li

en

te

J

av

a

(T

C

P

)

(15)

Programação de Sockets

E

x

em

p

lo

:

S

er

v

id

o

r

Ja

va

(T

C

P

)

(16)

Programação de Sockets

E

x

em

p

lo

:

S

er

v

id

o

r

Ja

va

(T

C

P

)

(17)

Programação de Sockets

Programação de Sockets com UDP

• UDP: não há conexão entre o cliente e o servidor

• não existe apresentação

• transmissor envia explicitamente endereço IP e porta de destino em cada mensagem • servidor deve extrair o endereço IP e porta

do transmissor de cada datagrama recebido

• UDP: dados transmitidos podem ser recebidos fora de ordem ou perdidos

Ponto de vista da aplicação UDP fornece uma transferência

não confiável de grupos de bytes (“datagramas”) entre o

cliente e o servidor. Ponto de vista da aplicação UDP fornece uma transferência

não confiável de grupos de bytes (“datagramas”) entre o

(18)

Programação de Sockets

sendto () bind () socket () recvfrom ()

Servidor

socket ()

Cliente

bloqueado sendto () recvfrom () Dados (pedido) Dados resposta) close () close ()

(19)

Programação de Sockets

In

te

ra

çã

o

C

li

en

te

/S

er

vi

d

o

r:

U

D

P

(20)

Programação de Sockets

E

x

em

p

lo

:

C

li

en

te

J

av

a

(U

D

P

)

(21)

Programação de Sockets

E

x

em

p

lo

:

C

li

en

te

J

av

a

(U

D

P

)

(22)

Programação de Sockets

E

x

em

p

lo

:

C

li

en

te

J

av

a

(U

D

P

)

(23)

Programação de Sockets

E

x

em

p

lo

:

S

er

v

id

o

r

Ja

va

(

U

D

P

)

(24)

Programação de Sockets

E

x

em

p

lo

:

S

er

v

id

o

r

Ja

va

(

U

D

P

)

(25)

Programação de Sockets

Sockets em Java

Java modernizou a API para trabalhar com sockets

O programador não precisa chamar todas as

funções, algumas chamadas são automáticas

Exemplos

Socket: equivalente a socket e bind

ServerSocket: equivalente a socket, bind e listen

Sockets são implementados no pacote java.net

A transmissão e o envio de dados são feitos através

de classes do pacote java.io de maneira semelhante

à escrita e leitura em arquivos

(26)

Programação de Sockets

Sockets em C/C++

C é a linguagem “básica” para programação

com sockets

De maneira diferente de Java, programar

com sockets em C/C++ envolve utilizar todas

as chamadas da API

(27)

Programação de Sockets

import java.net.*; import java.io.*;

public class SimpleJavaClient {

public static void main(String[] args) { try {

Socket s = new Socket("127.0.0.1", 9999);

InputStream i = s.getInputStream(); OutputStream o = s.getOutputStream(); String str;

do {

byte[] line = new byte[100]; System.in.read(line); o.write(line); i.read(line); str = new String(line); System.out.println(str.trim()); } while ( !str.trim().equals("bye") ); s.close(); }

catch (Exception err) {

System.err.println(err); }

} }

(28)

Programação de Sockets

#include ...

#include <sys/socket.h>

int main(int argc, char **argv) {

int s;

struct sockaddr_in dest;

char msg_write[100], msg_read[100];

s = socket(AF_INET, SOCK_STREAM, 0));

bzero(&dest, sizeof(dest)); dest.sin_family = AF_INET; dest.sin_port = htons(9999);

inet_aton(“127.0.0.1”, &dest.sin_addr.s_addr);

connect(s, (struct sockaddr*)&dest, sizeof(dest));

do {

scanf("%s",msg_write);

write (s, msg_write, strlen(msg_write)+1);

read (s, msg_read, MAXBUF); } while (strcmp(msg_read,"bye"));

close(s);

(29)

Programação de Sockets

import java.io.*; import java.net.*;

public class SimpleJavaServer {

public static void main(String[] args) { try {

ServerSocket s = new ServerSocket(9999); String str; while (true) { Socket c = s.accept(); InputStream i = c.getInputStream(); OutputStream o = c.getOutputStream(); do {

byte[] line = new byte[100]; i.read(line); o.write(line); str = new String(line); } while ( !str.trim().equals("bye") ); c.close(); } }

catch (Exception err){

System.err.println(err); }

} }

(30)

Programação de Sockets

#include ...

#include <sys/socket.h>

int main(int argc, char **argv)

{ int s, client_s;

struct sockaddr_in self, client; int addrlen = sizeof(client);

char msg_write[100], msg_read[100];

s = socket(AF_INET, SOCK_STREAM, 0);

bzero(&self, sizeof(self)); self.sin_family = AF_INET; self.sin_port = htons(9999);

self.sin_addr.s_addr = INADDR_ANY;

bind(s, (struct sockaddr*)&self, sizeof(self));

listen(s, 5);

while (1) {

client_s = accept(s, (struct sockaddr*)&client, &addrlen); do {

read (client_s, msg_read, MAXBUF);

write (client_s, msg_read, strlen(msg_read)+1);

} while (strcmp(msg_read,"bye"));

close(client_s);

} }

Referências

Documentos relacionados

Os testes intradérmicos não devem ser realizados em vacas após o sétimo mês de gestação, bezerros com menos de seis meses de vida, e nem em animais com endoparasi- toses ou

A execução Oficina Saúde no Envelhecer teve grande potencialidade de promoção do envelhecimento saudável para os idosos que participaram ativamente dos encontros,

A classificação do padrão topográfico pré e pós-operató­ rio dos pacientes incluídos para cirurgia foi realizada por 3 examinadores independentes que não possuíam os dados

O presente trabalho aborda o desenvolvimento de uma metodologia de projeto para o controle de plantas não lineares causais com restrições e tempos mortos dominantes,

Arqueologia Pública Campinas, SP v.13 n.2 p.66 2019 ISSN 2237-8294 Há que se pensar e agir para a promoção de um saber arqueológico e cultural crítico,

A maioria dos insumos para a indústria de alimentos e bebidas possuem matérias-primas de origem agrícola, esses por sua vez precificados sob influência dos mais variados

esse permanecer em tanta fuga. O tempo, o fluir, como algo que deve ser afirmado. Não se deve chorar porque as plantas crescem e o tempo passa, não se deve estar triste

Lance algumas bolinhas na direção da criança, ela deve tentar através da percepção de tempo e reação tentar recolher a bolinha com o copo. Alternar o movimento em ambos