Dev - C++ - Wan de sockets

 
Vista:

Wan de sockets

Publicado por Bonzo (1 intervención) el 19/02/2007 10:28:58
Buenos dias!

Tengo un pequeño problema que son incapaz de resover y seguro que es una tonteria de cuidado.

Resulta que tengo un servidor de fichaje montado en c, y necesito visualizar por pantalla la ip publica del cliente que se ha conectado al socket del servidor, se que hay que printear la estructura pero no veo donde?

Haber si me podeis echar una mano, hos dejo el codigo del servidor.

#include <cstdlib>
#include <iostream>
#include <time.h>
/*
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>*/

#include <winsock.h>

#define MAX_CONN 10 //Nº máximo de conexiones en espera

/**********************************************************/
/* función MAIN */
/* Orden Parametros: Puerto */
/* */
/**********************************************************/
main(int argc, char *argv[]) {
SOCKET s,s_aux;
struct sockaddr_in bs,in;//, out_s;
long int i=0;
time_t comienzo;
struct tm *tiempoComienzoPtr;

char entrada[100];
char expire[24];
char nombre[11]="datos.txt";
char salida[100]= {"Fichaje correcto que tengas un buen dia\nPrograma creado por Miguel Angel Auso "};
FILE *fichero;
int x,r=0;
//SOCKET sd;
WSADATA WSAData;
int length= sizeof(struct sockaddr);

if (WSAStartup (MAKEWORD(1,1), &WSAData) != 0)
{
MessageBox (NULL, TEXT("WSAStartup failed!"), TEXT("Error"), MB_OK);
return FALSE;
}

if (argc == 2) {
// Creamos el socket
s = socket(AF_INET, SOCK_STREAM,0);
if (s != -1) {
bs.sin_family = AF_INET;
bs.sin_port = htons(atoi(argv[1]));
bs.sin_addr.s_addr = htonl(INADDR_ANY);

//Asigna un nombre local al socket
if( bind(s,(struct sockaddr*)&bs, sizeof(bs)) != -1) {
x=0;
printf("\n\aServidor ACTIVO escuchando en el puerto: %s\n",argv[1]);
//Espera al establecimiento de alguna conexión
listen(s, MAX_CONN);
//Permite atender a múltiples usuarios
while (1) {
//Establece una conexión

s_aux = accept (s,(struct sockaddr*) &in,&length);
//printf("%s",s_aux);
//Recibe el mensaje del cliente
if (recv(s_aux,entrada, sizeof(entrada) ,0)== -1)
perror("Error en recvfrom");

comienzo = time( NULL );
tiempoComienzoPtr = gmtime( &comienzo );
printf( "Hora del Fichaje: %s\n", asctime(tiempoComienzoPtr) );
strcat(entrada,",");
strcat(entrada,asctime(tiempoComienzoPtr));
printf ("%s",entrada);

strcpy(expire,asctime(tiempoComienzoPtr));

if (expire[4]=='M' && expire[6]=='y')
{
printf("Error en la aplicacion pongase en contacto con el administrador\n\n");
exit(0);

}

//Envia el mensaje al cliente

if (send(s_aux,strcat(salida,"\0"),(int)strlen(salida)+1,0) == -1)
perror("Error en sendto");

//Cierra la conexión con el cliente actual
closesocket(s_aux);

/*

fichero = fopen( nombre, "a+" );
printf( "Fichero: %s -> ", nombre );
if( fichero )
printf( "creado (ABIERTO)\n" );
else
{
printf( "Error (NO ABIERTO)\n" );
return 1;
}

for( x=0; x<50; x++ )
{
if (r!=9)
{
putc( entrada[x], fichero );
if (entrada[x]==83)
{

if (entrada [x+1]==32)
{
putc(13,fichero);

r=9;
}

}
if (entrada [x]=69 )
{
if (entrada [x+1]==32)
{
putc(13,fichero);
r=9;
}

}
}
}
if( !fclose(fichero) )
printf( "\nFichero cerrado\n" );

else
{
printf( "\nError: fichero NO CERRADO\n" );
return 1;
}

r=0;
*/
}
//Cierra el servidor
closesocket(s);
} else {
printf("ERROR al nombrar el socket\n");
}
} else {
printf("ERROR: El socket no se ha creado correctamente!\n");
}
} else {
printf("\n\n\aEl número de parámetros es incorrecto\n\n");
}
system ("pause");
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder