Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de
Autor
|
Tema: Problema con sockets WinSock2 (Leído 1,491 veces)
|
Riki_89D
Desconectado
Mensajes: 848
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
Desconectado
Mensajes: 467
|
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: 848
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
Desconectado
Mensajes: 467
|
Cual error te tira?
|
|
|
|
|
En línea
|
|
|
|
Riki_89D
Desconectado
Mensajes: 848
BCN CITY
|
Bueno es el erro que e escrito yo en el utlimo "cout" en la funcion "connect"
|
|
|
|
|
En línea
|
|
|
|
naderST
Desconectado
Mensajes: 467
|
Cambia esto: connect(Cliente,(SOCKADDR *)&SockAddr,sizeof(SOCKADDR_IN)) Por esto: connect(Cliente,(SOCKADDR *)&SockAddr,sizeof(SOCKADDR))
|
|
|
|
|
En línea
|
|
|
|
Riki_89D
Desconectado
Mensajes: 848
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
Desconectado
Mensajes: 467
|
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: 848
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
Desconectado
Mensajes: 467
|
Creo que porque usaste la estructura SOCKADDR_IN y no sockaddr_in no se la verdad no estoy seguro.
|
|
|
|
|
En línea
|
|
|
|
Riki_89D
Desconectado
Mensajes: 848
BCN CITY
|
hey,donde pone "google.com" ai e puesto "localhost",i em tira el error 10061 k significa conexion rechazada,por lo visto nop pueod conectar a mi propio host,sabes que puede ser?
|
|
|
|
|
En línea
|
|
|
|
naderST
Desconectado
Mensajes: 467
|
Que raro... si tienes algún servidor a la escucha en el puerto que te estás tratando de conectar debería funcionar.
|
|
|
|
|
En línea
|
|
|
|
Riki_89D
Desconectado
Mensajes: 848
BCN CITY
|
Hola de nuevo,que tal,me surio un pequeño problemilla,ya consegui conectar los sockets i enviar datos al servidor,lo que pasa uqe cuando mando un simple "Hola" al llegar al servidor llega como caracteres raros :S no llega el "Hola" llegan cosas como "?$%" o cosas asin.....por que puede ser?¿
|
|
|
|
|
En línea
|
|
|
|
naderST
Desconectado
Mensajes: 467
|
El servidor lo hiciste tu? Si muestras algo de código sería mejor...
|
|
|
|
|
En línea
|
|
|
|
Riki_89D
Desconectado
Mensajes: 848
BCN CITY
|
Cliente: #include "windows.h" #include "iostream" #pragma comment(lib,"ws2_32.lib") #define PORT 9999 WSADATA wsa; SOCKET Client; int Conexion; sockaddr_in Remote_Server; int Error() { std::cout << "Error " << GetLastError() << std::endl; getchar(); return 0; } int main(void) { if(WSAStartup(MAKEWORD(2,0),&wsa) != 0) { Error(); } Remote_Server.sin_family = AF_INET; Remote_Server.sin_port = htons(PORT); Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr); Client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); Conexion = connect(Client,(sockaddr *)&Remote_Server,sizeof(sockaddr)); if(Conexion == INVALID_SOCKET) { Error(); } char *Buffer = (char*)malloc(5); send(Client,Buffer,strlen(Buffer),0); free(Buffer); return 0; } Servidor: #include "windows.h" #include "iostream" #pragma comment(lib,"ws2_32.lib") #define PORT 9999 WSADATA wsa; SOCKET Client; int Conexion; sockaddr_in Remote_Server; int Error() { std::cout << "Error " << GetLastError() << std::endl; getchar(); return 0; } int main(void) { if(WSAStartup(MAKEWORD(2,0),&wsa) != 0) { Error(); } Remote_Server.sin_family = AF_INET; Remote_Server.sin_port = htons(PORT); Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr); Client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); Conexion = bind(Client,(SOCKADDR*)&Remote_Server,sizeof(Remote_Server)); listen(Client,10); accept(Client,NULL,NULL); char *Buffer = (char*)malloc(5); while(true) { recv(Client,Buffer,strlen(Buffer),0); if(strcmp(Buffer,"Hola")) { break; } } std::cout << Buffer <<std::endl; getchar(); free(Buffer); return 0; } los datos se mandan,pero no se ven los caracteres correcamente
|
|
|
|
|
En línea
|
|
|
|
|
|