Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Próxima revisão
Revisão anterior
pua:cliente_udp [2008/08/13 21:31] – created mazieropua:cliente_udp [2014/03/28 15:16] (atual) maziero
Linha 1: Linha 1:
 +====== Exemplo UDP: Port talker ======
 +
 +Este exemplo implementa um cliente UDP que envia um pacote contendo uma mensagem à porta UDP 4950 de um servidor.
 +
 +<code c talker.c>
 +#include <stdio.h>
 +#include <stdlib.h>
 +#include <unistd.h>
 +#include <errno.h>
 +#include <string.h>
 +#include <sys/types.h>
 +#include <sys/socket.h>
 +#include <netinet/in.h>
 +#include <arpa/inet.h>
 +#include <netdb.h>
 +
 +// receiver listening port
 +#define RCVR_PORT 4950
 +
 +int main(int argc, char *argv[])
 +{
 +    int sockfd;
 +    struct sockaddr_in rcvr_addr;
 +    struct hostent *he;
 +    int numbytes;
 +
 +    if (argc != 3)
 +    {
 +        fprintf(stderr,"usage: talker hostname message\n");
 +        exit(1);
 +    }
 +
 +    // translates receiver name to address
 +    he = gethostbyname(argv[1]) ;
 +    if (he == NULL)
 +    {
 +        perror("gethostbyname");
 +        exit(1);
 +    }
 +
 +    // fills the receiver struct info
 +    rcvr_addr.sin_family = AF_INET;
 +    rcvr_addr.sin_port   = htons(RCVR_PORT);
 +    rcvr_addr.sin_addr   = *((struct in_addr *)he->h_addr);
 +
 +    // zeroes the rest of the struct
 +    memset(&(rcvr_addr.sin_zero), '\0', 8);
 +
 +    // creates the UDP socket
 +    sockfd = socket (AF_INET, SOCK_DGRAM, 0) ;
 +    if (sockfd == -1)
 +    {
 +        perror("socket");
 +        exit(1);
 +    }
 +
 +    // sends the message to the receiver using the socket
 +    numbytes = sendto (sockfd, argv[2], strlen(argv[2]), 0,
 +                       (struct sockaddr *) &rcvr_addr,
 +                       sizeof(struct sockaddr)) ;
 +    if (numbytes == -1)
 +    {
 +        perror("sendto");
 +        exit(1);
 +    }
 +
 +    printf ("sent %d bytes to host %s port %d\n", numbytes,
 +            inet_ntoa (rcvr_addr.sin_addr), RCVR_PORT);
 +
 +    // closes the socket
 +    close (sockfd);
 +
 +    return 0;
 +}
 +</code>