From 453a6491a164f1d9a7ff594577c3bfead5b50da0 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Wed, 8 Oct 2003 14:37:21 +0000 Subject: [PATCH] Se agregan pruebas de UDP/IP y ptheads de ricky. --- tests/cliente.c | 61 +++++++++++++++++++++++++++++++++++++++++++ tests/pthreads.c | 41 +++++++++++++++++++++++++++++ tests/server.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 tests/cliente.c create mode 100644 tests/pthreads.c create mode 100644 tests/server.c diff --git a/tests/cliente.c b/tests/cliente.c new file mode 100644 index 0000000..2ec9fe7 --- /dev/null +++ b/tests/cliente.c @@ -0,0 +1,61 @@ +/* + * Ejemplo de server Datagram, para chateo P2P + * + * Por Ricardo Markiewicz + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#define SERVER_PORT 4321 +#define BUFFER_LEN 1024 + +int main(int argc, char *argv[]) +{ + int sockfd; + struct sockaddr_in their_addr; /* Almacenara la direccion IP y numero de puerto del servidor */ + struct hostent *he; + int numbytes; + if (argc != 3) { + fprintf(stderr,"usage: cliente hostname mensaje\n"); + exit(1); + } + + /* convertimos el hostname a su direccion IP */ + if ((he=gethostbyname(argv[1])) == NULL) { + herror("gethostbyname"); + exit(1); + } + + /* Creamos el socket */ + if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { + perror("socket"); + exit(1); + } + + their_addr.sin_family = AF_INET; /* host byte order */ + their_addr.sin_port = htons(SERVER_PORT); /* network byte order */ + their_addr.sin_addr = *((struct in_addr *)he->h_addr); + bzero(&(their_addr.sin_zero), 8); + + /* enviamos el mensaje, esta linea contiene una barra invertida al final, + * indicando que sigue abajo + */ + if ((numbytes=sendto(sockfd,argv[2],strlen(argv[2]),0,(struct sockaddr *)&their_addr, sizeof(struct sockaddr))) == -1) { + perror("sendto"); + exit(1); + } + + printf("enviados %d bytes hacia %s\n",numbytes,inet_ntoa(their_addr.sin_addr)); + + close(sockfd); + + return 0; +} + diff --git a/tests/pthreads.c b/tests/pthreads.c new file mode 100644 index 0000000..6d04b97 --- /dev/null +++ b/tests/pthreads.c @@ -0,0 +1,41 @@ + +#include +#include +#include +#include +#include + +void *ejecuta_animal(void *p) +{ + int i; + int cuento = rand()%15; + int retardo = rand()%5+1; + char *yo = (char *)p; + + printf("%s::voy contar hasta %d (con retardo=%d)\n", yo, cuento, retardo); + + for(i=0; i<=cuento; i++) { + printf("%s:: voy por %d de %d\n", yo, i, cuento); + sleep(retardo); + } + + return NULL; +} + + +int main(int argc, char *argv[]) +{ + pthread_t s1, s2, s3; + + srand(time(NULL)); + pthread_create(&s1, NULL, ejecuta_animal, "GNU"); + pthread_detach(s1); + pthread_create(&s2, NULL, ejecuta_animal, "Vaca"); + pthread_detach(s2); + pthread_create(&s3, NULL, ejecuta_animal, "Conejo"); + pthread_detach(s3); + + pthread_exit(NULL); + return 0; +} + diff --git a/tests/server.c b/tests/server.c new file mode 100644 index 0000000..c15cbd5 --- /dev/null +++ b/tests/server.c @@ -0,0 +1,68 @@ +/* + * Ejemplo de server Datagram, para chateo P2P + * + * Por Ricardo Markiewicz + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#define SERVER_PORT 4321 +#define BUFFER_LEN 1024 + +int main(int argc, char *argv[]) +{ + int sockfd; + struct sockaddr_in my_addr; /* direccion IP y numero de puerto local */ + struct sockaddr_in their_addr; /* direccion IP y numero de puerto del cliente */ + /* addr_len contendra el tamanio de la estructura sockadd_in y numbytes el + * numero de bytes recibidos + */ + int addr_len, numbytes; + char buf[BUFFER_LEN]; /* Buffer de recepcion */ + + /* se crea el socket */ + if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { + perror("socket"); + exit(1); + } + + /* Se establece la estructura my_addr para luego llamar a bind() */ + my_addr.sin_family = AF_INET; /* host byte order */ + my_addr.sin_port = htons(SERVER_PORT); /* network byte order */ + my_addr.sin_addr.s_addr = INADDR_ANY; /* se asigna automaticamente la direccion IP local */ + bzero(&(my_addr.sin_zero), 8); /* rellena con ceros el resto de la estructura */ + + /* Se le da un nombre al socket */ + printf("Creando socket ....\n"); + if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) { + perror("bind"); + exit(1); + } + + /* Se reciben los datos */ + addr_len = sizeof(struct sockaddr); + printf("Esperando datos ....\n"); + if ((numbytes=recvfrom(sockfd, buf, BUFFER_LEN, 0, (struct sockaddr *)&their_addr, &addr_len)) == -1) { + perror("recvfrom"); + exit(1); + } + + /* Se visualiza lo recibido */ + printf("paquete proveniente de : %s\n",inet_ntoa(their_addr.sin_addr)); + printf("longitud del paquete en bytes : %d\n",numbytes); + buf[numbytes] = '\0'; + printf("el paquete contiene : %s\n", buf); + + /* devolvemos recursos al sistema */ + close(sockfd); + + return 0; +} + -- 2.43.0