Autor
|
Tema: Problema con sockets WinSock2 (Leído 8,403 veces)
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
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: 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?¿
|
|
|
En línea
|
|
|
|
naderST
|
Nunca le asignas a Cliente lo que devuelve la función socket()... Cliente = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
|
|
|
En línea
|
|
|
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
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
|
|
|
En línea
|
|
|
|
naderST
|
Cual error te tira?
|
|
|
En línea
|
|
|
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
Bueno es el erro que e escrito yo en el utlimo "cout" en la funcion "connect"
|
|
|
En línea
|
|
|
|
naderST
|
Cambia esto: connect(Cliente,(SOCKADDR *)&SockAddr,sizeof(SOCKADDR_IN))
Por esto: connect(Cliente,(SOCKADDR *)&SockAddr,sizeof(SOCKADDR))
|
|
|
En línea
|
|
|
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
Hey,acabo de probar,pero nada sigue sin funcionar que raro verdad?¿ puede ser algo de mi ordenador?¿ :S
|
|
|
En línea
|
|
|
|
naderST
|
La verdad no veo el error, pero aquí te dejo mi código que me funcionó: #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; }
|
|
|
En línea
|
|
|
|
Riki_89D
Desconectado
Mensajes: 851
BCN CITY
|
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 ^^
|
|
|
En línea
|
|
|
|
naderST
|
Creo que porque usaste la estructura SOCKADDR_IN y no sockaddr_in no se la verdad no estoy seguro.
|
|
|
En línea
|
|
|
|
|
|