elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  recv() socket error?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: recv() socket error?  (Leído 3,992 veces)
Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
recv() socket error?
« en: 11 Octubre 2011, 10:20 am »

Hola que ta? intento recivir la respuesta despues de llamar a send(),pero no da resultado:


este es el codigo que teoircamente tendria que lee :S

Código
  1. send(Sock,Cabecera,strlen(Cabecera),0);
  2. send(Sock,Datos,strlen(Datos),0);
  3. int ax;
  4. HANDLE File = CreateFile("Pagina.html",GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
  5.   do{
  6.   ax = recv(Sock,Buff,sizeof(Buff),0);
  7.   WriteFile(File,Buff,sizeof(Buff),&Bytes_Write,0);
  8.   } while(ax != 0);
  9.  
  10.  


aqui todo el code :S


Código
  1. #include "windows.h"
  2. #include "iostream"
  3.  
  4. #pragma comment(lib,"ws2_32.lib")
  5.  
  6. #define PORT_CONNECT 80
  7.  
  8. SOCKET Sock;
  9. int conexion = 0x0;
  10. struct sockaddr_in Server_Web;
  11. WSADATA wsa;
  12. char Buff[1000];
  13. DWORD Bytes_Read = 0;
  14. DWORD Bytes_Write = 0;
  15.  
  16. char Cabecera[] = "POST /login2.html HTTP/1.1\r\n"
  17. "Content-Type: application/x-www-form-urlencoded\r\n"
  18. "Host: foro.elhacker.net\r\n"
  19. "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1\r\n"
  20. "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
  21. "Accept-Language: en-us,en;q=0.5\r\n"
  22. "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
  23. "Connection: keep-alive\n"
  24. "Referer: http://foro.elhacker.net/login.html \r\n"
  25. "Cookie: __utma=;PHPSESSID=;\n";
  26.  
  27. char Datos[] = "user=USER&passwrd=PASS";
  28.  
  29. int main(void)
  30. {
  31. if(WSAStartup(MAKEWORD(2,0),&wsa) != 0)
  32. {
  33. std::cout << "Error al crear instancia" <<std::endl;
  34. getchar();
  35. }
  36.  
  37. Sock = socket(AF_INET,SOCK_STREAM,0);
  38. if(Sock == INVALID_SOCKET)
  39. {
  40. std::cout << "Error al crear el socket" <<std::endl;
  41. getchar();
  42. }
  43.  
  44. Server_Web.sin_family = AF_INET;
  45. Server_Web.sin_port = htons(PORT_CONNECT);
  46. Server_Web.sin_addr = *((in_addr*)gethostbyname("foro.elhacker.net")->h_addr);
  47. memset(Server_Web.sin_zero,0,8);
  48.  
  49. conexion = connect(Sock,(sockaddr*)&Server_Web,sizeof(sockaddr));
  50.  
  51. if(conexion == -1)
  52. {
  53. std::cout << "Error al conectar" <<std::endl;
  54. getchar();
  55. closesocket(Sock);
  56. WSACleanup();
  57. }
  58.  
  59. send(Sock,Cabecera,strlen(Cabecera),0);
  60. send(Sock,Datos,strlen(Datos),0);
  61. int ax;
  62. HANDLE File = CreateFile("Pagina.html",GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
  63.   do{
  64.   ax = recv(Sock,Buff,sizeof(Buff),0);
  65.   WriteFile(File,Buff,sizeof(Buff),&Bytes_Write,0);
  66.   } while(ax != 0);
  67.  
  68.  
  69.  
  70.  
  71.  
  72. return 0x0;
  73. }
  74.  
  75.  


Conectar conecta,pero leer no....:(


gracias cualquier ayuda sera buena


En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: recv() socket error?
« Respuesta #1 en: 13 Octubre 2011, 21:27 pm »

Citar
Return value
If no error occurs, recv returns the number of bytes received and the buffer pointed to by the buf parameter will contain this data received. If the connection has been gracefully closed, the return value is zero.
Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.

Revisa la condicion del while() ... Pienso que se deberia salir del bucle.


En línea

Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: recv() socket error?
« Respuesta #2 en: 13 Octubre 2011, 22:18 pm »

Hola,la verdad no entiendo muy bien,dice que si la conexions e cierra este devuelve 0,lo comprobe con un IF pero 0 no devuelvw,tambien lo comprobe con SOCKET_ERROR + WSAGetLastError() pero no hace nada,es como si el programa se quedara encallado en la funcion recv y de alli no lo mueve nadie :(


aqui esta la parte modificada:

Código
  1. do{
  2.  ax = recv(Sock,Buff,sizeof(Buff),0);
  3.  if(ax == SOCKET_ERROR)
  4.  {
  5.  std::cout << WSAGetLastError();
  6.  getchar();
  7.  }
  8.  WriteFile(File,Buff,sizeof(Buff),&Bytes_Write,0);
  9.  
  10.  
  11.  } while(ax != 0);
  12.  

y perdona mi ignorancia ee :S se que deberia salir del bucle pero nose como hacerlo,ya que se queda el programa estancado alli en recv :S
En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: recv() socket error?
« Respuesta #3 en: 14 Octubre 2011, 03:36 am »

Haz un bucle infinito y comprueba cuando recv() devuelva mayor que cero. Lo que puede pasar en tu caso es que recv devuelva 0 porque no está recibiendo nada de momento y esto hace que se salga del while()
En línea

Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: recv() socket error?
« Respuesta #4 en: 14 Octubre 2011, 19:07 pm »

Por que motivo no recive nada el socket?¿ que raro no? ninguna de las funciones como connect o socket() da error :S
En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: recv() socket error?
« Respuesta #5 en: 14 Octubre 2011, 19:56 pm »

Porque puede que en determinado momento no esté recibiendo nada desde el servidor...
En línea

Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: recv() socket error?
« Respuesta #6 en: 14 Octubre 2011, 21:09 pm »

Ok,bueno voy a probar lo del bucle infinitio y te cuento gracias ^^




ADJUNTO:

Acabo de probar lo del bucle infinito,lo tengo de esta manera:

Código
  1.  
  2. send(Sock,Cabecera,strlen(Cabecera),0);
  3. send(Sock,Datos,strlen(Datos),0);
  4.  
  5. while(1)
  6. {
  7.  
  8. REC = recv(Sock,Buff,sizeof(Buff),0);
  9. if(REC > 0)
  10. {
  11.  WriteFile(File,Buff,sizeof(Buff),&Bytes_Write,0);
  12.  break;
  13. }
  14.  
  15. }
  16.  
  17.  

Pero no hace nada...no recibe nada,se queda parado el programa y ya no hace nada mas,pero hay una cosa que me llama la atencion,y e sla cabecera que envio,fijate:

Código
  1. char Cabecera[] = "POST /login2.html HTTP/1.1\r\n"
  2. "Content-Type: application/x-www-form-urlencoded\n";
  3.  
  4. char Datos[] = "user=USER&passwrd=PASS";
  5.  

"Cabecera" contiene la peticion HTTP
"Datos" los datos de usuario

y si te fijas ago 2 Send();,es decir,llamo 2 veces a esa funcion,quizas tenga que hacer 2 recv() para conseguir leer ekl documento HTML no?¿



gracias de antemano
« Última modificación: 14 Octubre 2011, 21:17 pm por Riki_89D » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error de transmision por socket « 1 2 »
Programación Visual Basic
Nanoc 12 8,770 Último mensaje 22 Agosto 2013, 19:01 pm
por pepepoing
Error con el manejo de send y recv
Programación C/C++
Mr.Blue 2 3,486 Último mensaje 26 Noviembre 2010, 20:01 pm
por Mr.Blue
Error Socket?? « 1 2 »
Programación C/C++
<<<-Basura->>> 10 5,612 Último mensaje 29 Junio 2011, 00:47 am
por Queta
Sock_Raw recv(), recvfrom().....
Programación C/C++
soyloqbuskas 3 2,475 Último mensaje 6 Abril 2012, 14:45 pm
por soyloqbuskas
Socket send and recv problema « 1 2 »
Programación C/C++
<<<-Basura->>> 10 6,014 Último mensaje 2 Septiembre 2013, 11:26 am
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines