Autor
|
Tema: recv() socket error? (Leído 3,957 veces)
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
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 send(Sock,Cabecera,strlen(Cabecera),0); send(Sock,Datos,strlen(Datos),0); int ax; HANDLE File = CreateFile("Pagina.html",GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); do{ ax = recv(Sock,Buff,sizeof(Buff),0); WriteFile(File,Buff,sizeof(Buff),&Bytes_Write,0); } while(ax != 0);
aqui todo el code :S #include "windows.h" #include "iostream" #pragma comment(lib,"ws2_32.lib") #define PORT_CONNECT 80 SOCKET Sock; int conexion = 0x0; struct sockaddr_in Server_Web; WSADATA wsa; char Buff[1000]; DWORD Bytes_Read = 0; DWORD Bytes_Write = 0; char Cabecera[] = "POST /login2.html HTTP/1.1\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "Host: foro.elhacker.net\r\n" "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1\r\n" "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" "Accept-Language: en-us,en;q=0.5\r\n" "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n" "Connection: keep-alive\n" "Referer: http://foro.elhacker.net/login.html \r\n" "Cookie: __utma=;PHPSESSID=;\n"; char Datos[] = "user=USER&passwrd=PASS"; int main(void) { if(WSAStartup(MAKEWORD(2,0),&wsa) != 0) { std::cout << "Error al crear instancia" <<std::endl; getchar(); } Sock = socket(AF_INET,SOCK_STREAM,0); if(Sock == INVALID_SOCKET) { std::cout << "Error al crear el socket" <<std::endl; getchar(); } Server_Web.sin_family = AF_INET; Server_Web.sin_port = htons(PORT_CONNECT); Server_Web.sin_addr = *((in_addr*)gethostbyname("foro.elhacker.net")->h_addr); memset(Server_Web.sin_zero,0,8); conexion = connect(Sock,(sockaddr*)&Server_Web,sizeof(sockaddr)); if(conexion == -1) { std::cout << "Error al conectar" <<std::endl; getchar(); closesocket(Sock); WSACleanup(); } send(Sock,Cabecera,strlen(Cabecera),0); send(Sock,Datos,strlen(Datos),0); int ax; HANDLE File = CreateFile("Pagina.html",GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); do{ ax = recv(Sock,Buff,sizeof(Buff),0); WriteFile(File,Buff,sizeof(Buff),&Bytes_Write,0); } while(ax != 0); return 0x0; }
Conectar conecta,pero leer no.... gracias cualquier ayuda sera buena
|
|
|
En línea
|
|
|
|
naderST
|
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
Mensajes: 851
BCN CITY
|
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: do{ ax = recv(Sock,Buff,sizeof(Buff),0); if(ax == SOCKET_ERROR) { std::cout << WSAGetLastError(); getchar(); } WriteFile(File,Buff,sizeof(Buff),&Bytes_Write,0); } while(ax != 0);
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
|
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
Mensajes: 851
BCN CITY
|
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
|
Porque puede que en determinado momento no esté recibiendo nada desde el servidor...
|
|
|
En línea
|
|
|
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
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: send(Sock,Cabecera,strlen(Cabecera),0); send(Sock,Datos,strlen(Datos),0); while(1) { REC = recv(Sock,Buff,sizeof(Buff),0); if(REC > 0) { WriteFile(File,Buff,sizeof(Buff),&Bytes_Write,0); break; } }
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: char Cabecera[] = "POST /login2.html HTTP/1.1\r\n" "Content-Type: application/x-www-form-urlencoded\n"; char Datos[] = "user=USER&passwrd=PASS";
"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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Error de transmision por socket
« 1 2 »
Programación Visual Basic
|
Nanoc
|
12
|
8,753
|
22 Agosto 2013, 19:01 pm
por pepepoing
|
|
|
Error con el manejo de send y recv
Programación C/C++
|
Mr.Blue
|
2
|
3,455
|
26 Noviembre 2010, 20:01 pm
por Mr.Blue
|
|
|
Error Socket??
« 1 2 »
Programación C/C++
|
<<<-Basura->>>
|
10
|
5,529
|
29 Junio 2011, 00:47 am
por Queta
|
|
|
Sock_Raw recv(), recvfrom().....
Programación C/C++
|
soyloqbuskas
|
3
|
2,442
|
6 Abril 2012, 14:45 pm
por soyloqbuskas
|
|
|
Socket send and recv problema
« 1 2 »
Programación C/C++
|
<<<-Basura->>>
|
10
|
5,950
|
2 Septiembre 2013, 11:26 am
por eferion
|
|