Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NeoB en 8 Agosto 2012, 17:23 pm



Título: Ayuda con sockets en C (bajo windows)
Publicado por: NeoB en 8 Agosto 2012, 17:23 pm
Buenas. Esta vez mi duda es como puedo utilizar una URL en una comunicación con sockets tcp/ip en windows en vez de la IP. Tengo este código:
Código
  1. #include <windows.h>
  2. #include <winsock2.h> //Para sockets
  3. #include <ws2tcpip.h> //Para sockets
  4.  
  5.  
  6. int main()
  7. {
  8. /*************************** DE LOS SOCKETS **************************/
  9. WSADATA wsa;
  10. int sock;
  11. struct sockaddr_in direccion;
  12.  
  13. WSAStartup(MAKEWORD(2,0),&wsa);
  14.  
  15. if((sock=socket(AF_INET,SOCK_STREAM,0))==-1 )
  16. {
  17. return -1;
  18. }
  19.  
  20. direccion.sin_family=AF_INET;
  21. direccion.sin_port=htons(5000);
  22. direccion.sin_addr.s_addr=inet_addr("192.168.1.35");  
  23.  
  24. if(connect(sock,(struct sockaddr*)&direccion,sizeof(direccion))==-1)
  25. {
  26. return -1;
  27. }
  28. /***********  ....va pa largo......   ************/
  29.  
Es decir, cambiar el 192.168.1.35 por algo como "miurl.com".
Utilizo mingw.
Gracias.


Título: Re: Ayuda con sockets en C (bajo windows)
Publicado por: 0xDani en 8 Agosto 2012, 17:41 pm
Hay funciones para eso, consulta gethostbyname().

Saludos.


Título: Re: Ayuda con sockets en C (bajo windows)
Publicado por: NeoB en 9 Agosto 2012, 15:34 pm
Ya había encontrado la función pero había entendido mal y creía que había que hacerlo con una librería externa. Gracias.


Título: Re: Ayuda con sockets en C (bajo windows)
Publicado por: NeoB en 9 Agosto 2012, 18:51 pm
Una última pregunta...
El servidor que utilizo corre en Linux y al intentar conectarlo no va (no pasa nada en el servidor y el cliente se cierra como si no hubiese servidor). En cambio, se el servidor es windows si funciona.
¿Hay algún problema corriente entre las conexiones de Winsock y los sockets de linux o es otro error? (He buscado en google pero los casos que vienen están en Java o hablan de portabilidad...)


Título: Re: Ayuda con sockets en C (bajo windows)
Publicado por: 0xDani en 9 Agosto 2012, 20:19 pm
Quiza tenga que ver con el orden en el que los bytes se almacenan en el servidor Linux. ¿Tienes el codigo que usas en Linux?

Saludos.


Título: Re: Ayuda con sockets en C (bajo windows)
Publicado por: NeoB en 9 Agosto 2012, 20:40 pm
He de advertir que el código del servidor es "improvisado" de una web para compilarlo rápido y probar el cliente por lo que no tiene ni salida de los bucles ni nada, solo para ver si se conectan:
Código
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <stdio.h>
  4. #include <netinet/in.h>
  5. #include <arpa/inet.h>
  6. #include <unistd.h>
  7.  
  8. int main()
  9. {
  10.  
  11. int server_sockfd, client_sockfd;
  12. int server_len, client_len;
  13. struct sockaddr_in server_address;
  14. struct sockaddr_in client_address;
  15. char c[1024];
  16.  
  17.  
  18. server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
  19.  
  20.  
  21. server_address.sin_family = AF_INET;
  22. server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
  23. server_address.sin_port = htons(5000);
  24. server_len = sizeof(server_address);
  25. bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
  26. listen(server_sockfd, 5);
  27.  
  28. client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);
  29.  
  30. printf("Cliente conectado\n");
  31. for(;;)
  32. {
  33. read(client_sockfd, c, 1024);
  34. printf(c);
  35. }
  36.  
  37. return 0;
  38.  
  39. }
  40.  


Título: Re: Ayuda con sockets en C (bajo windows)
Publicado por: 0xDani en 10 Agosto 2012, 15:22 pm
Pues no se, quiza tenga que ver con que lo configuras con IP de localhost.

Saludos.


Título: Re: Ayuda con sockets en C (bajo windows)
Publicado por: NeoB en 10 Agosto 2012, 17:42 pm
Biennnnnnnn!!!!!
Ya funciona!!!
La verdad es que no entendía muy bien para que esa línea en el servidor (ahora sí).
Al final era cambiar el
Código
  1. inet_addr("127.0.0.1")
por
Código
  1. INADDR_ANY
y ya acepta la conexión.
Muchas gracias!