]> git.llucax.com Git - z.facultad/75.42/plaqui.git/commitdiff
Se agregan pruebas de UDP/IP y ptheads de ricky.
authorLeandro Lucarella <llucax@gmail.com>
Wed, 8 Oct 2003 14:37:21 +0000 (14:37 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Wed, 8 Oct 2003 14:37:21 +0000 (14:37 +0000)
tests/cliente.c [new file with mode: 0644]
tests/pthreads.c [new file with mode: 0644]
tests/server.c [new file with mode: 0644]

diff --git a/tests/cliente.c b/tests/cliente.c
new file mode 100644 (file)
index 0000000..2ec9fe7
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Ejemplo de server Datagram, para chateo P2P
+ *
+ * Por Ricardo Markiewicz
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <netdb.h>
+#include <arpa/inet.h>
+#include <sys/types.h>
+
+#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 (file)
index 0000000..6d04b97
--- /dev/null
@@ -0,0 +1,41 @@
+
+#include <stdio.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <time.h>
+
+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 (file)
index 0000000..c15cbd5
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Ejemplo de server Datagram, para chateo P2P
+ *
+ * Por Ricardo Markiewicz
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <netdb.h>
+#include <arpa/inet.h>
+#include <sys/types.h>
+
+#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;
+}
+