#include #include #include #include #include #include #include #include int servidorDNS(char *mensaje, char *IP, char *PUERTO) { int dns, i; struct sockaddr_in d_servidor; char nombre_cliente[256]; char m[250]; printf("3.1> Estableciendo gethostname del DNS\n"); if (gethostname(nombre_cliente,sizeof(nombre_cliente))==-1) { printf("Error a la hora de establecer el nombre del host"); exit(-1); } printf("3.2> Estableciendo canal del DNS\n"); if((dns=socket(AF_INET,SOCK_STREAM,0))== -1){ printf("Error en el establecimiento del socket"); exit(-1); } d_servidor.sin_family = AF_INET; d_servidor.sin_addr.s_addr = inet_addr("193.147.118.222"); d_servidor.sin_port = htons(8000); printf("3.3> Llamando al sistema remoto DNS...\n"); if(connect(dns,&d_servidor,sizeof(d_servidor)) == -1){ printf("Error en la conexion con el bufer"); exit(-1); } strcpy(m,mensaje); strcat(m,"\n"); printf(">>>> MENSAJE ENVIADO: %s\n",mensaje); write(dns,m,strlen(m)); leer_linea(dns,m,256); printf("<<<< MENSAJE RECIBIDO: %s\n",m); close(dns); for(i=0;i<=14;i++) IP[i]=m[i]; IP[i]='\0'; for(i=16;i<=19;i++) PUERTO[i-16]=m[i]; PUERTO[i-16]='\0'; return 0; } void main(int argc, char *argv[]){ int sfd; struct hostent *host_servidor; struct sockaddr_in d_servidor; char nombre_cliente[256]; char IP[20]; char PUERTO[5]; int PORT; if(argc!=3){ printf("Indica el nombre del host asociado al servidor\n"); printf("Especifica el nombre de la persona que se conecta\n"); exit(-1); } printf("1> Haciendo Gethostname()\n"); if (gethostname(nombre_cliente,sizeof(nombre_cliente))==-1) { printf("Error a la hora de establecer el nombre del host"); exit(-1); } printf("2> Llamando al DNS...."); servidorDNS(argv[1],IP,PUERTO); printf("3> Conexion %s:%s...\n",IP,PUERTO); d_servidor.sin_family = AF_INET; d_servidor.sin_addr.s_addr = inet_addr(IP); d_servidor.sin_port = htons(atoi(PUERTO)); printf("4> Estableciendo canal\n"); if((sfd=socket(AF_INET,SOCK_STREAM,0))== -1){ printf("Error en el establecimiento del socket"); exit(-1); } if(connect(sfd,&d_servidor,sizeof(d_servidor)) == -1){ printf("Error en la conexion con el bufer"); exit(-1); } printf("CONEXION ESTABLECIDA>>>>>>\n\n\n"); establecer_conexion(sfd,nombre_cliente,argv[1],argv[2]); close(sfd); exit(0); }