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.
Hay funciones para eso, consulta gethostbyname().
Saludos.
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.
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...)
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.
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;
}
Pues no se, quiza tenga que ver con que lo configuras con IP de localhost.
Saludos.
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!