Ayuda con sockets en C (bajo windows)

Iniciado por NeoB, 8 Agosto 2012, 17:23 PM

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

NeoB

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:

#include <windows.h>
#include <winsock2.h> //Para sockets
#include <ws2tcpip.h> //Para sockets

 
int main()
{
/*************************** DE LOS SOCKETS **************************/
WSADATA wsa;
int sock;
struct sockaddr_in direccion;

WSAStartup(MAKEWORD(2,0),&wsa);

if((sock=socket(AF_INET,SOCK_STREAM,0))==-1 )
{
return -1;
}

direccion.sin_family=AF_INET;
direccion.sin_port=htons(5000);
direccion.sin_addr.s_addr=inet_addr("192.168.1.35");  

if(connect(sock,(struct sockaddr*)&direccion,sizeof(direccion))==-1)
{
return -1;
}
/***********  ....va pa largo......   ************/

Es decir, cambiar el 192.168.1.35 por algo como "miurl.com".
Utilizo mingw.
Gracias.

0xDani

Hay funciones para eso, consulta gethostbyname().

Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

NeoB

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.

NeoB

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...)

0xDani

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.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

NeoB

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:

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main()
{

int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
char c[1024];


server_sockfd = socket(AF_INET, SOCK_STREAM, 0);


server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = htons(5000);
server_len = sizeof(server_address);
bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
listen(server_sockfd, 5);

client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);

printf("Cliente conectado\n");
for(;;)
{
read(client_sockfd, c, 1024);
printf(c);
}

return 0;

}

0xDani

Pues no se, quiza tenga que ver con que lo configuras con IP de localhost.

Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

NeoB

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 inet_addr("127.0.0.1") por INADDR_ANY y ya acepta la conexión.
Muchas gracias!