#include #include #include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { unsigned char data; int port_number; struct sockaddr_in serv_addr, cli_addr; int socket_fd, cli_len, res; if (argc != 2) { printf("Usage: udp_server \n"); exit(1); } port_number = atoi(argv[1]); if (port_number <= 1024) { printf("Invalid port number. Port <= 1024. Aborting ...\n"); exit(1); } if ((socket_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) exit(1); bzero((char *)&serv_addr, sizeof(struct sockaddr_in)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(port_number); if (bind(socket_fd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr_in)) < 0) exit(1); while(1) { cli_len = sizeof(cli_addr); res = recvfrom(socket_fd, (void *)&data, 1, 0, (struct sockaddr *) &cli_addr, &cli_len); if (res != 1) { printf("UDP Server: Receive error. ..\n"); exit(-1); } if (data == 0) { close(socket_fd); exit(0); } sendto(socket_fd, (void *)&data, 1, 0, &cli_addr, cli_len); } exit(0); }