Micro Tutorial Sockets em C++

Started by OnlyOne, 22 de March , 2006, 07:31:38 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

OnlyOne

Micro tutorial Sockets C++ by OnlyOne

ja faz tempo q tb nao mexo com c++ , mas vamos la ....

este texto esta direcionado para a plataforma WINDOWS

Let's go !! ....

***********************************************************************


ferramentas utilizadas

- IDE Dev-C++ 4.0


***********************************************************************

---- Consertando o Dev-c++ 4.0 ----------------------------------------

antes de começar , devemos consertar o Dev-C++ , isto e , arrummar uma

biblioteca q vem com erro


1- va no diretorio dos includes , onde estao os arquivos *.h
2- abra o arquivo winsock2.h
3- va para o final do arquivo
4- localize o trecho de codigo abaixo :


ifdef __cplusplus
}
#endif
#endif


isso deve ficar assim


#ifdef __cplusplus
}
#endif
#endif
 

ok ?

salve o arquivo


***********************************************************************

---- passando parametros de compilaçao ao Dev-C++ ---------------------


para compilar sockets em C++ com o Dev , vc deve passar alguns

parametros de compilaçao , senao seu prog nao funciona ok ?


1- va no menu Options
2- Compiler Options
3- marque a opçao "Add the following commands when calling compiler"
4- escreva o seguinte :

-Wall -O2 -lwsock32

5- clique em ok

***********************************************************************

---- Carregando a winsock.dll ----------------------------------------

vc precisa carregar essa dll pra q seu programa funcione isso deve ser

feito assim :


WORD version;
WSADATA data;

version = MAKEWORD(2,0);
 if(WSAStartup(version,&data) != 0)
  printf("%s\n","Nao carregou Dll"),exit(0);


isso tem q ser a primeira coisa q vc tem a fazer no seu codigo ok ?


***********************************************************************

---- Fazendo uma conexao ----------------------------------------------

para conectar faremos assim :


SOCKET sock;
struct sockaddr_in info;
int conexao;


sock = socket(AF_INET,SOCK_STREAM,0);
 if(sock < 0)exit(0);

info.sin_family = AF_INET;
info.sin_port = htons(21);
info.sin_addr.s_addr = inet_addr("127.0.0.1");

memset(info.sin_zero,0,sizeof(info.sin_zero));

conexao = connect(sock,(struct sockaddr*)&alvo,sizeof(alvo));

 if(conexao < 0){
  printf("%s\n","Nao realizou conexao");
   closesocket(sock);
    WSACleanup();
     exit(0); }


bom , oq estamos fazendo e :

preencher a struct sockaddr_in com as informaçoes da conexao como porta

alvo , ip alvo , etc ...

de posse desses dados fazemos a conexao

se nao conectar , fecha o socket , libera a winsock.dll com a funçao

WSACelanup(); e sai do programa . ate aqui blz ne ?


***********************************************************************

---- Enviando dados na conexao ----------------------------------------

agora vamos escrever dados na conexao assim , de acordo com o exemplo

anterior :

char msg[4096];

memset(msg,0,sizeof(msg));

send(sock,msg,sizeof(msg),0);

so isso , usamos a funçao send() pra enviar um dado na conexao :)


***********************************************************************

---- Recebendo dados na conexao ---------------------------------------


para recebermos uma resposta faremos desse modo , de acordo com os

exemplos :

char resposta[4096];

memset(resposta,0,sizeof(resposta));


recv(sock,resposta,4096,0);
 printf("\n %s \n",resposta);


facil ne ? usamos a funçao recv() pra receber dados em uma conexao

***********************************************************************

---- Resolver DNS -----------------------------------------------------

pra vc pode digitar o dominio do alvo ao inves do seu ip , por exemplo

, pra vc digitar www.darkers.com.br no seu programa ao inves do ip do

darkers vc fara assim :


struct hostent *h;
char *ip = "www.darkers.com.br";
char resp[4096];

memset(resp,0,sizeof(resp));


h = gethostbyname(ip);
 if(h == NULL)
  printf("%s\n","Host desconhecido"),exit(0);

else
sprintf(resp,"%s",inet_ntoa(*((struct in_addr *)h->h_addr)));


certo ? se o dns for resolvido , copia o ip para o buffer resp , a dai

pra frente vc ja pode manipulra o ip


***********************************************************************

simples , como tudo na vida deveria ser


                         Only
                         n
                         e
No céu toca Joy Division