/* ** talker.c -- a datagram "client" demo */ #include #include #include #include #include #include #include #include #include #define SERVERPORT 3490 /* the port users will be connecting to */ #define MAXBUFLEN 128 int main(int argc, char *argv[]) { char buf[MAXBUFLEN]; int sockfd, sin_size; struct sockaddr_in their_addr; /* connector's address information */ struct hostent *he; int numbytes; if (argc != 2) { fprintf(stderr,"usage: client_udptcp hostname \n"); exit(1); } if ((he=gethostbyname(argv[1])) == NULL) { /* get the host info */ perror("gethostbyname"); exit(1); } if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { perror("socket"); exit(1); } their_addr.sin_family = AF_INET; /* host byte order */ their_addr.sin_port = htons(SERVERPORT); /* short, network byte order */ their_addr.sin_addr = *((struct in_addr *)he->h_addr); bzero(&(their_addr.sin_zero), 8); /* zero the rest of the struct */ sin_size = sizeof(struct sockaddr); if ((numbytes= sendto(sockfd,buf,0,0,(struct sockaddr *)&their_addr, sizeof(struct sockaddr_in))) == -1) { perror("sendto"); exit(1); } if ((numbytes=recvfrom(sockfd,buf, MAXBUFLEN,0,(struct sockaddr *)&their_addr, &sin_size)) == -1) { perror("recvfrom"); exit(1); } buf[numbytes]=0; printf("received: %sfrom: %s\n",buf,inet_ntoa(their_addr.sin_addr)); close(sockfd); return 0; }