Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior | |||
pua:servidor_udp [2014/03/28 18:17] – maziero | pua:servidor_udp [2014/03/28 18:18] (atual) – maziero | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Exemplo UDP: Port listener ====== | ||
+ | |||
+ | Este exemplo implementa um servidor UDP que ouve a porta 4950, recebe um pacote e exibe seu conteúdo. | ||
+ | |||
+ | <code c listener.c> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | // the port I'll listen to | ||
+ | #define RCVR_PORT 4950 | ||
+ | |||
+ | // input buffer size | ||
+ | #define MAXBUFLEN 100 | ||
+ | |||
+ | int main(void) | ||
+ | { | ||
+ | int sockfd; | ||
+ | struct sockaddr_in rcvr_addr; | ||
+ | struct sockaddr_in sndr_addr; | ||
+ | int numbytes; | ||
+ | socklen_t addr_len; | ||
+ | char buf[MAXBUFLEN]; | ||
+ | |||
+ | // creates the UDP socket | ||
+ | if ((sockfd = socket (AF_INET, SOCK_DGRAM, 0)) == -1) | ||
+ | { | ||
+ | perror(" | ||
+ | exit(1); | ||
+ | } | ||
+ | |||
+ | // fills struct with receiver' | ||
+ | rcvr_addr.sin_family = AF_INET; | ||
+ | rcvr_addr.sin_port = htons(RCVR_PORT); | ||
+ | rcvr_addr.sin_addr.s_addr = INADDR_ANY; | ||
+ | memset(& | ||
+ | |||
+ | // associates the socket to receiver' | ||
+ | if (bind (sockfd, (struct sockaddr *) & | ||
+ | sizeof (struct sockaddr)) == -1) | ||
+ | { | ||
+ | perror(" | ||
+ | exit(1); | ||
+ | } | ||
+ | |||
+ | // waits for a packet arriving to the socket | ||
+ | addr_len = sizeof(struct sockaddr); | ||
+ | printf (" | ||
+ | numbytes = recvfrom(sockfd, | ||
+ | (struct sockaddr *) & | ||
+ | if (numbytes == -1) | ||
+ | { | ||
+ | perror (" | ||
+ | exit (1); | ||
+ | } | ||
+ | |||
+ | // prints packet info and contents | ||
+ | printf ("Got packet from host %s: | ||
+ | inet_ntoa (sndr_addr.sin_addr), | ||
+ | buf[numbytes] = ' | ||
+ | printf (" | ||
+ | |||
+ | // closes the socket | ||
+ | close (sockfd); | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </ | ||