Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
| pua:servidor_udp [2014/03/27 12:19] – 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; | ||
| + | } | ||
| + | </ | ||