Aqui mando un codigo que me pasaron que segun manda a traer la fecha y la hora de otro equipo pero a mi no me funciona al correrlo se tiene que poner cdaytime que es el ejecutable generado seguido de la ip del equipo que deseas, a ver si lo puedes hechar a andar por que a mi siempre me dice error de conexion.
para compilarlo: gcc socket.c -o cdaytime
para correrlo: cdaytime ip <---cualquier ip conectada a la red
Ahi va el codigo:
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
char *hosts; /*apuntador al servidor*/
int sockfd; /*variable del descriptor
del socket*/
int result; /*variable donde toma lo
leido del hosts*/
struct hostent *hostinfo; /*estructura de datos del
servidor*/
struct sockaddr_in miip; /*estructura Internet*/
struct servent *servinfo; /*servicios numeros de
puertos asociados*/
char buffer[512]; /*tamaño del buffer que
toma*/
if (argc != 2){
system("clear"); /*limpia la pantalla*/
printf("\n\n"); /*impresion de 2 lìneas con
retorno*/
printf("Solo pueden pasar 2 parametros, nombre del programa \n");
/*Mensaje de error para el paso de parametros*/
printf("y nombre del servidor o direccion IP de este.\n");
printf("Ejemplo ./cdaytime 148.226.81.4 \n");
exit(1);
}
hosts = argv[1]; /*Toma el valor del
1 Parametro*/
/*Encontrar la direccion del hosts y reporta un error si no
se encuentra*/
hostinfo = gethostbyname (hosts); /*Toma la
informaciòn del hosts*/
if (!hostinfo) { /*no evaluada la
expresion anterior*/
printf("No existe host \n"); /*Error en datos del
host*/
exit(1); /*Sale del
programa*/
}
system("clear"); /*Limpia la
pantalla*/
printf("\n\n"); /*impresion de 2
lineas con retorno*/
printf("Hosts: %s\n", hostinfo -> h_name); /*imprime nombre del
servidor*/
/*imprime la direccion IP del Servidor*/
printf("Direccion: %s\n", inet_ntoa(*((struct in_addr
*)hostinfo->h_addr)));
/*Revisa el servicio daytime si existe en el hosts */
servinfo = getservbyname("daytime", "tcp"); /*Información del
servicio*/
if (!servinfo) { /*Checa si existe
el servicio*/
printf("No existe este servicio \n"); /*Imprime no
existe servicio*/
exit(1); /*Sale del
programa*/
}
/*Imprime en que puerto esta el servicio Daytime*/
printf("Daytime esta en el puerto %d\n", ntohs(servinfo ->s_port));
/*Creo el socket*/
/*Transferencia orientada a conexion*/
sockfd = socket(AF_INET, SOCK_STREAM, 0);
/*Construir la direcciòn para usarla con connect */
miip.sin_family = AF_INET; /*Familia de
protocolos*/
miip.sin_port = servinfo -> s_port; /*Puerto de
conexion*/
miip.sin_addr = *(struct in_addr *)*hostinfo -> h_addr_list; /*IP de
Hosts */
/*CONECTA Y REGRESA LA INFORMACION*/
result = connect(sockfd, (struct sockaddr *)&miip, sizeof(miip));
if (result == -1) { /*PREGUNTA SI FALLO LA CONEXION*/
perror("Error"); /*IMPRIME EL MENSAJE*/
exit(1); /*Sale del programa*/
}
/* LEE LA INFORMACION DEL SERVIDOR */
result = read(sockfd, buffer, sizeof(buffer)); /* Asigna el dato a
result */
printf("Lee %d bytes: %s\n", result, buffer); /* Imprime los datos */
close(sockfd); /* Cierra el socket */
return 0;
}
Si les funciona diganme como le hicieron o que le modificaron ok, bye.