Unix Sockets em C parte 2

Veremos agora algumas funções úteis para a programação com sockets:

uint16_t htons(uint16_t hostshort);
Converte um short int com o número da porta (no caso de um intel, little endian), para um número de porta utilizando network byte order (big endian).
servidor.sin_port=htons(4050);  // (seta a porta para 4050)

in_addr_t inet_addr(const char *cp);
Seta o endereço do host.
servidor.sin_addr.s_addr=inet_addr(“200.164.72.31”);

struct hostent *gethostbyname(const char *name);
Utilizada para resolução de nomes. A estrtura hostent é:
struct  hostent {
char    *h_name;        /* Nome oficial do host */
char    **h_aliases;    /* Lista de aliases */
int     h_addrtype;     /* Tipo de endereco do host */
int     h_length;       /* Tamanho do endereco */
char    **h_addr_list;  /* Lista de enderecos do
servidor de nomes */
};

ssize_t send(int s, const void *buf, size_t len, int flags);
Envia uma mensagem através da conexão. *buf é a string a ser enviada, len é o tamanho da string e flags são parâmetros para envio da mensagem. Quando flags é igual a 0, ela se comporta como a função write().
send(Novosocket, “HelloWorld!\n”, 12, 0);

Exemplo prático de um cliente que se conecta em um servidor e envia uma mensagem de saudação:

//Headers necessários
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/signal.h>
#include <errno.h>
#include <netdb.h>

int main(){
int sock;
struct sockaddr_in server;
int conn;

//cria o soquete
sock = socket(AF_INET,SOCK_STREAM,0);
if(sock < 0) //verifica erros
{
perror(“Erro ao criar soquete.”);
exit(1);
}

//preenche a estrutra com dados do servidor.
server.sin_family = AF_INET;
server.sin_port = htons(7000);
server.sin_addr.s_addr = inet_addr(“192.168.2.1”);
bzero(&(server.sin_zero),8);

//estabelece a conexão com o host
conn = connect(sock,(struct sockaddr * )&server, sizeof(server));
if(conn < 0) { //checa por erros
perror(“Erro ao conectar”);
exit(1);
} else {
send(Novosocket, “HelloWorld!\n”, 12, 0); //envia a mensagem
}
}
Vimos até agora como criar um cliente que se conecta a um servidor. Um exemplo básico que ilustra como conectar e como enviar mensagens ao mesmo. Apesar de básico, reflita: Se você consegue fazer algo simples, o que te impede de fazer algo complexo?

to be continued…

Deixe um comentário