Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
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.