Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ayuda con socket en C bajo linux

Estas en el tema de Ayuda con socket en C bajo linux en el foro de Programación General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 02/12/2004, 09:23
Avatar de Sigfried  
Fecha de Ingreso: octubre-2004
Mensajes: 69
Antigüedad: 19 años, 6 meses
Puntos: 0
Ayuda con socket en C bajo linux

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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:30.