int socket(int domain, int type, int protocol);
ssize_t sendto(int s, const void *buf, size_t len,int flags, const struct sockaddr *to, socklen_t tolen);
int main(int arg, char *args[]) { int st = socket(AF_INET, SOCK_DGRAM, 0); if (st == -1) { printf("socket failed %s\n", strerror(errno)); return 0; } int on = 1; if (setsockopt(st, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)) == -1) { printf("setsockopt failed %s\n", strerror(errno)); return EXIT_FAILURE; } struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(8080); addr.sin_addr.s_addr = inet_addr(args[1]); char buf[1024]; while (1) { memset(buf, 0, sizeof(buf)); read(STDIN_FILENO, buf, sizeof(buf)); if (sendto(st, buf, strlen(buf), 0, (struct sockaddr *) &addr, sizeof(addr)) == -1) { printf("sendto failed %s\n", strerror(errno)); break; } } close(st); return EXIT_SUCCESS; }
ssize_t recvfrom(int s, void *buf, size_t len, int flags,
struct sockaddr *from, socklen_t *fromlen);
int main(void) { int st = socket(AF_INET, SOCK_DGRAM, 0); if (st == -1) { printf("socket failed %s\n", strerror(errno)); return 0; } struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(8080); addr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(st, (struct sockaddr *)&addr, sizeof(addr)) == -1) { printf("bind failed %s\n", strerror(errno)); return -1; } char buf[1024]; struct sockaddr_in client_addr; socklen_t len = sizeof(client_addr); while(1) { memset(&client_addr, 0, sizeof(client_addr)); memset(buf, 0, sizeof(buf)); if(recvfrom(st, buf, sizeof(buf), 0, (struct sockaddr *)&client_addr, &len) == -1) { printf("recvfrom failed %s\n", strerror(errno)); break; }else { printf("%s recv is %s\n", inet_ntoa(client_addr.sin_addr), buf); } } close(st); return 0; }
原文:http://www.cnblogs.com/shichuan/p/4496314.html