[Ayuda] Programando socke cliente y servidor en C

Iniciado por r1ghtz0, Octubre 13, 2014, 06:32:20 PM

Tema anterior - Siguiente tema

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

Octubre 13, 2014, 06:32:20 PM Ultima modificación: Octubre 13, 2014, 07:25:04 PM por blackdrake
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:
Código: c

#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:
Código: c

#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;
}


Octubre 13, 2014, 06:55:29 PM #1 Ultima modificación: Octubre 13, 2014, 07:04:52 PM por fermino
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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.
Visita mi blog: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.