Aquí está el servidor, lo que hago es ingresar los datos del servidor pero me gustaría ver cual es la ip que se le asigna al servidor con INADDR_ANY, ¿Como puedo hacer para ver la ip del server?
Servidor:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(void)
{
/* Abriendo socket */
int sockfd, new_sockfd;
struct sockaddr_in server_addr;
struct sockaddr_in cliente_addr;
int addrlen;
sockfd= socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == -1){
printf("Error abriendo el socket...");
}
/* Asociación de parámetros al socket */
server_addr.sin_family= AF_INET;
server_addr.sin_port= htons(1234);
server_addr.sin_addr.s_addr= htonl(INADDR_ANY);
if(bind(sockfd, (struct sockaddr *) &server_addr, sizeof(server_addr))==-1){
printf("\nError en bind()...");
}
/* Habilitamos el socket para recibir peticiones y establecer conexiones */
listen(sockfd, 5);
addrlen= sizeof(struct sockaddr);
/* Recibimos peticiones con accept() */
new_sockfd= accept(sockfd, (struct sockaddr *) &cliente_addr, &addrlen);
if(new_sockfd == -1){
printf("Error, no se pudo recibir petición correctamente");
}
return 0;
}
Ahora lo que no entiendo en el cliente es cómo se le asignan los datos, es decir, cómo o de donde el cliente optiene su puerto de origen y su direción ip, porque no se especifican en ningun lado, solo estan los datos del servidor, es todo.
Cliente:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(void)
{
struct sockaddr_in server;
char ip[16];
int fd, puerto;
int addrlen;
printf("Ingrese la ip del servidor\n");
scanf("%s", ip);
printf("Ingrese el puerto de conexión\n");
scanf("%d", &puerto);
/* Abrimos el socket */
fd= socket(AF_INET, SOCK_STREAM, 0);
if(fd==-1){
printf("Error abriendo el socket");
return -1;
}
/* Definimos los datos del servidor */
server.sin_family= AF_INET;
server.sin_port= htons(1234);
server.sin_addr.s_addr= inet_addr(ip);
addrlen= sizeof(struct sockaddr);
if(connect(fd, (struct sockaddr *)&server, addrlen) == -1){
printf("\nHa ocurrido un error al conectarce al server");
}
return 0;
}
Supongo que se le asigna cualquier IP que esté asociada con esa computadora, ya ea 127.0.0.1 (localost), la IP privada (Dentro de la LAN), o; si está asignada alguna IP pública, inclusive a esa.
Prueba de conectarte a 127.0.0.1 desde la misma PC; debería funcionar...
La intuición me dice que INADDR_ANY, dice que al servido se le asigna cualquier IP disponible, es decir; que un cliente se puede conectar por cualquier ip que esté relacionada a esa PC (Como explicaba arriba).
Pero no estoy seguro. Nada sé de C.
¿...Alguien...?
EDITO:
Mira esto: https://www.cs.cmu.edu/~srini/15-441/F01.full/www/assignments/P2/htmlsim_split/node18.html (https://www.cs.cmu.edu/~srini/15-441/F01.full/www/assignments/P2/htmlsim_split/node18.html).