Hands on: Introdução a sockets em C – Parte 2

Hands on: Introdução a sockets em C - Parte 2
Olá pessoal, esta é a segunda parte do post sobre Sockets no Linux. Se ainda não viu a primeira postagem, você pode acessá-la aqui. O
código abaixo ilustra um cliente para se conectar no servidor. Neste
exemplo, estamos conectando no servidor de horas criado na parte um
desta postagem.
Para compilar, basta invocar o GCC:

[code type=”Linguagem C”]gcc client.c -Wall -o client[/code]


As
partes que são praticamente idênticas na parte cliente e servidor não
serão explicadas, uma vez que já foram abordadas na primeira parte da
postagem. Segue abaixo uma explicação da parte cliente:

[code type=”Linguagem C”]inet_aton(“127.0.0.1”, &server_addr.sin_addr);[/code]

A chamada inet_aton recebe um endereço IPv4 na forma de string, converte este para binário (utilizando a convenção Network Byte Order) e armazena na estrutura sockaddr_in. Para mais informações sobre ordenação de bytes em diferentes arquiteturas veja este link da Wikipédia.


[code type=”Linguagem C”]connect(server_fd, (struct sockaddr *)&server_addr, (socklen_t)sizeof(server_addr))[/code]

A chamada de sistema connect conecta o file descriptor do socket (neste
caso server_fd) ao endereço do servidor dentro da estrutura
sockaddr_in. Após esta chamada, podemos dizer que o cliente conectou com
sucesso no servidor.

[code type=”Linguagem C”]recv(server_fd, buf, sizeof(buf), 0)[/code]

A chamada de recv é usada para receber dados de um socket. O segundo
parâmetro contém um buffer onde serão armazenados os dados lidos do
socket. O ultimo parâmetro refere-se aos possíveis flags que podemos
informar e desta forma alterar o comportamento da chamada recv ao
receber os dados.

O valor zero informa que não será passado nenhum flag e
desta forma a chamada recv fica esperando até conseguir ler dados do
servidor.


A saída abaixo foi obtida após executar o cliente, este conectando no servidor da postagem anterior:

[code type=”Saídas”] marcos@xfiles sempreupdate-$ ./client[/code]

[code type=”Linguagem C”]Recebido do servidor: Sun Jan 4 23:38:31 2015[/code]
Este
foi somente um pequeno exemplo do uso de sockets. Muito mais pode ser
feito e para exemplificar segue um pequeno projeto pessoal para criar um
chat em C++ utilizando sockets no meu Github.

Aguardamos por suas dúvidas e comentários. Obrigado e até a próxima!

[ads-post]

você pode gostar também Mais do autor

Comentários