2 * Ejemplo de server Datagram, para chateo P2P
4 * Por Ricardo Markiewicz
13 #include <arpa/inet.h>
14 #include <sys/types.h>
16 #define SERVER_PORT 4321
17 #define BUFFER_LEN 1024
19 int main(int argc, char *argv[])
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
27 int addr_len, numbytes;
28 char buf[BUFFER_LEN]; /* Buffer de recepcion */
30 /* se crea el socket */
31 if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
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 */
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) {
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) {
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);
61 printf("el paquete contiene : %s\n", buf);
63 /* devolvemos recursos al sistema */