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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con sockets WinSock2
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con sockets WinSock2  (Leído 7,763 veces)
Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Problema con sockets WinSock2
« Respuesta #10 en: 25 Septiembre 2011, 20:49 pm »

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 Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Problema con sockets WinSock2
« Respuesta #11 en: 26 Septiembre 2011, 05:10 am »

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 Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Problema con sockets WinSock2
« Respuesta #12 en: 26 Septiembre 2011, 21:22 pm »

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 Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Problema con sockets WinSock2
« Respuesta #13 en: 26 Septiembre 2011, 21:43 pm »

El servidor lo hiciste tu? Si muestras algo de código sería mejor...
En línea

Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Problema con sockets WinSock2
« Respuesta #14 en: 26 Septiembre 2011, 21:56 pm »

Cliente:

Código
  1. #include "windows.h"
  2. #include "iostream"
  3. #pragma comment(lib,"ws2_32.lib")
  4.  
  5. #define PORT 9999
  6.  
  7. WSADATA wsa;
  8. SOCKET Client;
  9. int Conexion;
  10. sockaddr_in Remote_Server;
  11.  
  12. int Error()
  13. {
  14. std::cout << "Error " << GetLastError() << std::endl;
  15. getchar();
  16. return 0;
  17. }
  18.  
  19. int main(void)
  20. {
  21.    if(WSAStartup(MAKEWORD(2,0),&wsa) != 0)
  22. {
  23. Error();
  24. }
  25.  
  26. Remote_Server.sin_family = AF_INET;
  27. Remote_Server.sin_port = htons(PORT);
  28. Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);
  29.  
  30. Client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  31.  
  32. Conexion = connect(Client,(sockaddr *)&Remote_Server,sizeof(sockaddr));
  33.  
  34. if(Conexion == INVALID_SOCKET)
  35. {
  36. Error();
  37. }
  38.  
  39. char *Buffer = (char*)malloc(5);
  40. send(Client,Buffer,strlen(Buffer),0);
  41. free(Buffer);
  42.  
  43. return 0;
  44. }
  45.  


Servidor:
Código
  1. #include "windows.h"
  2. #include "iostream"
  3. #pragma comment(lib,"ws2_32.lib")
  4.  
  5. #define PORT 9999
  6.  
  7. WSADATA wsa;
  8. SOCKET Client;
  9. int Conexion;
  10. sockaddr_in Remote_Server;
  11.  
  12. int Error()
  13. {
  14. std::cout << "Error " << GetLastError() << std::endl;
  15. getchar();
  16. return 0;
  17. }
  18.  
  19. int main(void)
  20. {
  21.    if(WSAStartup(MAKEWORD(2,0),&wsa) != 0)
  22. {
  23. Error();
  24. }
  25.  
  26. Remote_Server.sin_family = AF_INET;
  27. Remote_Server.sin_port = htons(PORT);
  28. Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);
  29.  
  30. Client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  31.  
  32. Conexion = bind(Client,(SOCKADDR*)&Remote_Server,sizeof(Remote_Server));
  33. listen(Client,10);
  34. accept(Client,NULL,NULL);
  35. char *Buffer = (char*)malloc(5);
  36. while(true)
  37. {
  38.  
  39. recv(Client,Buffer,strlen(Buffer),0);
  40. if(strcmp(Buffer,"Hola"))
  41. {
  42. break;
  43. }
  44.  
  45. }
  46. std::cout << Buffer <<std::endl;
  47. getchar();
  48. free(Buffer);
  49. return 0;
  50. }
  51.  

los datos se mandan,pero no se ven los caracteres correcamente
En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Problema con sockets WinSock2
« Respuesta #15 en: 26 Septiembre 2011, 22:13 pm »

En el cliente nunca le asignas ningún contenido a la variable Buffer, de esta manera:

Cliente:
Código
  1. #include "windows.h"
  2. #include "iostream"
  3. #pragma comment(lib,"ws2_32.lib")
  4.  
  5. #define PORT 9999
  6.  
  7. WSADATA wsa;
  8. SOCKET Client;
  9. int Conexion;
  10. sockaddr_in Remote_Server;
  11.  
  12. int Error()
  13. {
  14. std::cout << "Error " << GetLastError() << std::endl;
  15. getchar();
  16. return 0;
  17. }
  18.  
  19. int main(void)
  20. {
  21.    if(WSAStartup(MAKEWORD(2,0),&wsa) != 0)
  22. {
  23. Error();
  24. }
  25.  
  26. Remote_Server.sin_family = AF_INET;
  27. Remote_Server.sin_port = htons(PORT);
  28. Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);
  29.  
  30. Client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  31.  
  32. Conexion = connect(Client,(sockaddr *)&Remote_Server,sizeof(sockaddr));
  33.  
  34. if(Conexion == INVALID_SOCKET)
  35. {
  36. Error();
  37. }
  38.  
  39. char buffer[] = "Hola";
  40. send(Client,buffer,strlen(buffer),0);
  41.  
  42. return 0;
  43. }
  44.  

Y lo recibes mal no le puedes hacer strlen() a Buffer

Servidor:
Código
  1. #include "windows.h"
  2. #include "iostream"
  3. #pragma comment(lib,"ws2_32.lib")
  4.  
  5. #define PORT 9999
  6.  
  7. WSADATA wsa;
  8. SOCKET Client;
  9. int Conexion;
  10. sockaddr_in Remote_Server;
  11.  
  12. int Error()
  13. {
  14. std::cout << "Error " << GetLastError() << std::endl;
  15. getchar();
  16. return 0;
  17. }
  18.  
  19. int main(void)
  20. {
  21.    if(WSAStartup(MAKEWORD(2,0),&wsa) != 0)
  22. {
  23. Error();
  24. }
  25.  
  26. Remote_Server.sin_family = AF_INET;
  27. Remote_Server.sin_port = htons(PORT);
  28. Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);
  29.  
  30. Client = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  31.  
  32. Conexion = bind(Client,(SOCKADDR*)&Remote_Server,sizeof(Remote_Server));
  33. listen(Client,10);
  34. accept(Client,NULL,NULL);
  35. char *Buffer = (char*)malloc(5);
  36. while(true)
  37. {
  38.  
  39. memset(Buffer, 0, 5);
  40. recv(Client,Buffer,4,0);
  41. if(!strcmp(Buffer,"Hola"))
  42. {
  43. break;
  44. }
  45.  
  46. }
  47. std::cout << Buffer <<std::endl;
  48. getchar();
  49. free(Buffer);
  50. return 0;
  51. }

PD: Recuerda que strcmp() devuelve 0 si las cadenas son iguales.
En línea

Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Problema con sockets WinSock2
« Respuesta #16 en: 26 Septiembre 2011, 22:24 pm »

Hola,acabo de probar los codigo,pero no recibe nad ale servidor....:S se queda con la pantalla negra
En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Problema con sockets WinSock2
« Respuesta #17 en: 26 Septiembre 2011, 22:36 pm »

No me había fijado pero estás aceptando mal la conexión... en la parte donde llamas a la función accept() deberías hacer algo así:

Código
  1. SOCKET nueva_conex;
  2. do{
  3. nueva_conex = accept(Client, NULL,NULL);
  4. }while(nueva_conex == SOCKET_ERROR);

Y en esta parte en el servidor deberías cambiarla así:

Remote_Server.sin_addr = *((in_addr *)gethostbyname("localhost")->h_addr);

por

Remote_Server.sin_addr = INADDR_ANY;

Edit:

Recuerda que cuando llames accept() te devolverá una variable tipo SOCKET que es la nueva conexión que acabas de aceptar y esa variable es la que utilizarás para enviar/recibir los datos.
En línea

Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Problema con sockets WinSock2
« Respuesta #18 en: 27 Septiembre 2011, 10:33 am »

Hola,el servidor no me dja poner "Remote_Server.sin_addr = INADDR_ANY;"

me da error en donde esta el "="


ERROR:
error C2679: '=' binario : no se encontró un operador que adopte un operando en la parte derecha de tipo 'u_long'
En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Problema con sockets WinSock2
« Respuesta #19 en: 27 Septiembre 2011, 19:52 pm »

Disculpa es así:

Remote_Server.sin_addr.s_addr = INADDR_ANY;

O sino:

Remote_Server.sin_addr.S_un.S_addr = INADDR_ANY;
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con Sockets
Programación Visual Basic
APOKLIPTICO 9 3,137 Último mensaje 6 Octubre 2007, 23:12 pm
por APOKLIPTICO
no se puede abrir el archivo 'Winsock2.lib'
Programación C/C++
YagamiIori2002 3 3,495 Último mensaje 9 Diciembre 2011, 23:03 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines