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 (http://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