• Jueves 14 de Noviembre de 2024, 22:46

Autor Tema:  Informacion Del Cliente Socket  (Leído 797 veces)

betitono1

  • Miembro MUY activo
  • ***
  • Mensajes: 235
    • Ver Perfil
Informacion Del Cliente Socket
« en: Martes 3 de Febrero de 2004, 16:18 »
0
Hola que tal alguien podira decirme como tomar informacion del cliente socket cuando se conecta al socket servidor, informacion como por ejemplo de la IP del cliente, nombre de la maquina y cosas asi.

Saludos.

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Informacion Del Cliente Socket
« Respuesta #1 en: Martes 3 de Febrero de 2004, 18:48 »
0
Hola.

Por tu pregunta deduzco que tienes el código de un servidor y que, cuando aceptas una conexión, quieres saber desde qué dirección IP viene y qué puerto.

Si te fijas, la sintaxis de accept (para aceptar conexiones entrantes por TCP) es:

Código: Text
  1.  
  2. int accept(int s, struct sockaddr *sa, int *addrlen);
  3.  
  4.  
  5.  

Para aceptar una conexión se haría así:

Código: Text
  1.  
  2. struct sockaddr_in sa;
  3. int size_sa = sizeof(sa);
  4. int cliente = accept(mi_socket_tcp, (struct sockaddr *) &sa, &size_sa);
  5.  
  6.  
  7.  

Después de esto, en cliente tendrías el descriptor de la conexión que acabas de hacer y en sa tendrías la dirección IP y el puerto de donde proviene.

Para obtener los valores del struct, que estarán en el formato de la red, se hace así:

Código: Text
  1.  
  2. // Retorna la dirección IP en formato de cadena
  3. char *inet_ntoa(sa.sin_addr);
  4.  
  5. // Retorna el puerto con los bytes bien ordenados
  6. unsigned short ntohs(sa.sin_port);
  7.  
  8.  
  9.  

Espero que te haya servido de ayuda.

Un saludo.

Ruben3d