#include < sys/types.h > #include < sys/socket.h > #include < netinet/in.h > #include < unistd.h > #include < stdio.h > #include < string.h > #include < arpa/inet.h > int main() { int sock_fd; struct sockaddr_in sv_addr, cl_addr; socklen_t cl_len; ssize_t n; char buf[4096]; if((sock_fd = socket(PF_INET, SOCK_DGRAM, 0)) < 0){ perror("socket"); return 1; } memset(&sv_addr, 0, sizeof sv_addr); sv_addr.sin_family = AF_INET; sv_addr.sin_addr.s_addr = htonl(INADDR_ANY); sv_addr.sin_port = htons(12345); if (bind(sock_fd, (struct sockaddr *)&sv_addr, sizeof sv_addr)<0){ perror("bind"); return 1; } cl_len = sizeof cl_addr; if ((n = recvfrom(sock_fd, buf, sizeof buf, 0, (struct sockaddr *)&cl_addr, &cl_len)) < 0){ perror("recvfrom"); return 1; } fprintf(stderr, "UDP from addr = %s, port = %d\n", inet_ntoa(cl_addr.sin_addr), ntohs(cl_addr.sin_port)); write(1, buf, n); return 0; }