/* simple talk program (UDP version) - client */ #include <stdio.h> #include <fcntl.h> #include <signal.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define SERV_UDP_PORT 6000 #define SERV_HOST_ADDR "128.197.11.14" #define CLI_UDP_PORT 6000 #define CLI_HOST_ADDR "128.197.11.17" #define MAXLINE 512 int sockfd; int main(void) { int n; struct sockaddr_in cli_addr, serv_addr; char sendline[MAXLINE]; void sigio_handler(int); if ((sockfd = socket(AF_INET,SOCK_DGRAM,0)) < 0) err_sys("socket"); if (fcntl(sockfd, F_SETOWN, getpid()) == -1) err_sys("fcntl"); if (fcntl(sockfd, F_SETFL, FASYNC) == -1) err_sys("fcntl"); if (signal(SIGIO, sigio_handler) == SIG_ERR) err_sys("signal"); bzero((char *) &cli_addr, sizeof(cli_addr)); cli_addr.sin_family = AF_INET; cli_addr.sin_addr.s_addr = inet_addr(CLI_HOST_ADDR); cli_addr.sin_port = htons(CLI_UDP_PORT); if (bind(sockfd, (struct sockaddr *) &cli_addr, sizeof(cli_addr)) < 0) err_sys("bind"); bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(SERV_HOST_ADDR);; serv_addr.sin_port = htons(SERV_UDP_PORT);; while (fgets(sendline, MAXLINE, stdin) != NULL) { n = strlen(sendline); if (sendto(sockfd, sendline, n, 0, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) != n) err_sys("sendto"); } exit(0); }