]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - tests/server.c
Bue, ahora se pueden girar los bichos y queda re bonito, pero que ni se les ocurra...
[z.facultad/75.42/plaqui.git] / tests / server.c
1 /*
2  * Ejemplo de server Datagram, para chateo P2P
3  *
4  * Por Ricardo Markiewicz
5  *
6  */
7
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <errno.h>
11 #include <string.h>
12 #include <netdb.h>
13 #include <arpa/inet.h>
14 #include <sys/types.h>
15
16 #define SERVER_PORT 4321
17 #define BUFFER_LEN 1024
18
19 int main(int argc, char *argv[])
20 {
21         int sockfd;
22         struct sockaddr_in my_addr; /* direccion IP y numero de puerto local */
23         struct sockaddr_in their_addr; /* direccion IP y numero de puerto del cliente */
24         /* addr_len contendra el tamanio de la estructura sockadd_in y numbytes el
25          * numero de bytes recibidos
26          */
27         int addr_len, numbytes;
28         char buf[BUFFER_LEN]; /* Buffer de recepcion */
29
30         /* se crea el socket */
31         if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
32                 perror("socket");
33                 exit(1);
34         }
35
36         /* Se establece la estructura my_addr para luego llamar a bind() */
37         my_addr.sin_family = AF_INET; /* host byte order */
38         my_addr.sin_port = htons(SERVER_PORT); /* network byte order */
39         my_addr.sin_addr.s_addr = INADDR_ANY; /* se asigna automaticamente la direccion IP local */
40         bzero(&(my_addr.sin_zero), 8); /* rellena con ceros el resto de la estructura */
41
42         /* Se le da un nombre al socket */
43         printf("Creando socket ....\n");
44         if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {
45                 perror("bind");
46                 exit(1);
47         }
48
49         /* Se reciben los datos */
50         addr_len = sizeof(struct sockaddr);
51         printf("Esperando datos ....\n");
52         if ((numbytes=recvfrom(sockfd, buf, BUFFER_LEN, 0, (struct sockaddr *)&their_addr, &addr_len)) == -1) {
53                 perror("recvfrom");
54                 exit(1);
55         }
56
57         /* Se visualiza lo recibido */
58         printf("paquete proveniente de : %s\n",inet_ntoa(their_addr.sin_addr));
59         printf("longitud del paquete en bytes : %d\n",numbytes);
60         buf[numbytes] = '\0';
61         printf("el paquete contiene : %s\n", buf);
62
63         /* devolvemos recursos al sistema */
64         close(sockfd);
65         
66         return 0;
67 }
68