Buscar

Arquitetura de Sistemas Distribuídos API exemplo Material Teórico

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
 
Explicação das funções da API exemplo 
 
Veja, a seguir, as declarações na linguagem C (para cada função) dos tipos de 
parâmetros bem como o tipo dos valores de retorno das funções: 
 
função await_contact 
 
Um servidor chama a função await_contact para esperar o contato de um 
cliente: 
connection await_contact(appnum a) 
A chamada recebe um valor do tipo appnum e retorna um valor do tipo 
connection. 
O parâmetro especifica um número que identifica o aplicativo do servidor. O 
cliente, por sua vez, precisa especificar o mesmo número quando estiver 
contatando o servidor. 
Por fim, o servidor usa o valor de retorno (do tipo connection) para transferir 
dados. 
 
função make_contact 
 
Um cliente chama a função make_contact para estabelecer contato com o 
servidor: 
connection make_contact (computer c, appnum a) 
Uma chamada necessita de dois parâmetros para identificar o computador no 
qual o servidor esteja executando e o número do aplicativo que o servidor 
está utilizando naquele computador. 
O cliente, por sua vez, usa o valor de retorno (do tipo connection) para 
transferir dados. 
 
 
 
 
 
 
 
 
2 
 
função appname_to_appnum 
 
Tanto clientes quanto servidores utilizam a função appname_to_appnum para 
traduzir o nome de um serviço
1
 legível por humanos para um valor binário 
interno: 
appnum appname _to_appnum(char *a) 
A chamada utiliza um parâmetro do tipo string
2
 e retorna um valor binário 
equivalente do tipo appnum. 
 
função cname_to_comp 
 
Os clientes chamam a função cname_to_comp para converter um nome de 
computador legível por humanos para um valor binário interno: 
computer cname_to_comp (char *c) 
A chamada toma um parâmetro do tipo string (char *) e retorna um valor 
binário equivalente do tipo computer. 
 
função send 
 
Tanto os clientes quanto os servidores usam a função send para transferir 
dados através da rede: 
int send(connection con, char *buffer, int lenght, int flags) 
A chamada utiliza quatro parâmetros: 
 O primeiro identifica uma conexão previamente estabelecida com a 
função await_contact ou make_contact; 
 O segundo é o endereço de um buffer que contém dados a serem 
enviados; 
 O terceiro dá o tamanho dos dados em bytes (8 bits); 
 O quarto é zero para uma transferência normal. 
 
 
1 Os nomes de serviço são padronizados através da internet. Por exemplo, www denota 
World Wide Web. 
 
2 Usa-se a declaração char * para denotar um string. 
 
 
3 
 
Caso um erro tenha ocorrido, a função send retorna o número de bytes 
transferido ou um valor negativo. 
Já a função send_eof é usada para enviar um fim de arquivo após o envio de 
todos os dados. 
funções recv e recvln 
 
Tanto clientes quanto servidores usam a função recv para acessar os dados 
que chegam através da rede: 
int recv (connection con, char *buffer, int lenght, int flags) 
A chamada utiliza quatro parâmetros: 
 O primeiro identifica uma conexão previamente estabelecida com a 
função await_contact ou make_contact; 
 O segundo é o endereço de um buffer para onde os dados devem ser 
enviados; 
 O terceiro dá o tamanho do buffer em bytes (8 bits); 
 O quarto é zero para transferências normais. 
 
A função recv retorna o número de bytes que foram colocados no buffer, 
utilizando o parâmetro zero para indicar que o fim de arquivo foi alcançado 
ou um valor negativo para indicar que um erro ocorreu. 
No código de exemplo, também usamos uma função de biblioteca recvln que, 
repetidamente, chama a função recv até que uma linha inteira do texto tenha 
sido recebida. 
A definição de recvln é a seguinte: 
int recvln(connection con, char *buffer, int lenght) 
função send_eof 
 
Tanto o cliente quanto o servidor precisam enviar a função send_eof após o 
envio de dados para informar ao outro lado que nenhuma transmissão futura 
ocorrerá. 
Do outro lado, a função recv retorna o valor zero quando recebe o fim de 
transmissão: 
 
 
 
4 
 
int send_eof (connection con) 
A chamada tem um parâmetro que especifica a conexão previamente 
estabelecida com a função await_contact ou make_contact. A função retorna 
um valor negativo para indicar que um erro ocorreu e, caso contrário, um 
valor não negativo. 
 
Resumo dos tipos da API exemplo 
 
A tabela a seguir resume os parâmetros usados para cada função no exemplo 
anterior da API, apresentando o tipo de cada parâmetro (argumento) bem 
como o tipo de retorno: 
 
Nome da função Tipo retornado Tipo de arg 1 Tipo de arg 2 Tipo de arg 3 & 4 
await_contact connection appnum 
make_contact connection computer appnum 
appname_to_appnum appnum char* 
cname_to_comp computer char* 
send int connection 
recv int connection char* int 
recvln int connection char* int 
send eof int connection char* int 
 
Fonte: COMER, 2007.

Outros materiais