Problema con sockets WinSock2

Iniciado por Riki_89D, 25 Septiembre 2011, 18:25 PM

0 Miembros y 1 Visitante están viendo este tema.

Riki_89D

Hola que tal,recien estoy con los sockets,intento conectarme a una IP,por el puerto 80 ya que es una pagina,solo quiero conectar,el codigo no da error,peor el IF que averigua si se conecta me da el error,miren:

Código (cpp) [Seleccionar]

SOCKET Cliente;
u_short Puerto = 80;
SOCKADDR_IN SockAddr;
char Datos[] = "Hola";
WSADATA skd;

int main(void)
{
if(WSAStartup(MAKEWORD(2,0),&skd) != 0)
{
std::cout << "Error initializing socket";
std::cin.get();
return 0;
}
if(socket(AF_INET,SOCK_STREAM,IPPROTO_TCP) == INVALID_SOCKET)
{
std::cout <<"Invalid socket";

return 1;
}

memset(&SockAddr,0,sizeof(SockAddr));

SockAddr.sin_family = AF_INET;
SockAddr.sin_port = htons(Puerto);
SockAddr.sin_addr.s_addr = inet_addr("74.125.39.99");
int con = connect(Cliente,(SOCKADDR *)&SockAddr,sizeof(SOCKADDR_IN));
if(con != 0)
{
std::cout << "Error connecting";
std::cin.get();
return 1;
}



parece que no conecta :S,algun error ven?¿

naderST

Nunca le asignas a Cliente lo que devuelve la función socket()...
Código (cpp) [Seleccionar]

Cliente = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

Riki_89D

Hola,que tal,acabo de agregar la linea que me as dicho,el programa enciende,se queda un rato pensando (cosa que no hacia antes) pero alfinal me tira el mismo error :(

naderST


Riki_89D

Bueno es el erro que e escrito yo en el utlimo "cout" en la funcion "connect"

naderST

Cambia esto:

Código (cpp) [Seleccionar]

connect(Cliente,(SOCKADDR *)&SockAddr,sizeof(SOCKADDR_IN))


Por esto:

Código (cpp) [Seleccionar]

connect(Cliente,(SOCKADDR *)&SockAddr,sizeof(SOCKADDR))

Riki_89D

Hey,acabo de probar,pero nada sigue sin funcionar :( que raro verdad?¿

puede ser algo de mi ordenador?¿ :S



naderST

La verdad no veo el error, pero aquí te dejo mi código que me funcionó:

Código (cpp) [Seleccionar]
#include <iostream>
#include <Windows.h>
#pragma comment(lib, "Ws2_32.lib")
#define PUERTO 80

WSADATA wsa;
SOCKET cliente;
sockaddr_in remoto;

int error();

int main(){
if(WSAStartup(MAKEWORD(2,2), &wsa))
return error();

remoto.sin_family = AF_INET;
remoto.sin_port = htons(PUERTO);
remoto.sin_addr = *((in_addr*)gethostbyname("www.google.com")->h_addr);

cliente = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if(cliente == INVALID_SOCKET)
return error();

if(connect(cliente, (sockaddr*)&remoto, sizeof(sockaddr)))
return error();

closesocket(cliente);

WSACleanup();

return 0;
}

int error(){
std::cout << "Error #" << GetLastError() << std::endl;
WSACleanup();

getchar();

return 0;
}

Riki_89D

perfecto el tuyo si funciona,de todas formas me gustaria saber que a pasado con mi codio mas que nada para aprender un poco mas :) unca viene mal sia lguien ve el error sera de agradecer,muchas gracias por el code ^^

naderST

Creo que porque usaste la estructura SOCKADDR_IN y no sockaddr_in no se la verdad no estoy seguro.