Копилка
Если вам понравился наш сайт или вы нашли полезную информацию, то у вас есть возможность отблагодарить администрацию.
UDP broadcast
//---------------------------------------------------sender.c: #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <netinet/in.h> #define PORT 2080 // #define SRC_ADDR "172.16.1.120" #define DEST_ADDR "255.255.255.255" int main(int argc, char *argv[]) { int sockfd; int broadcast=1; struct sockaddr_in sendaddr; struct sockaddr_in recvaddr; int numbytes; if((sockfd = socket(PF_INET,SOCK_DGRAM,0)) == -1) { perror("sockfd"); exit(1); } if((setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST, &broadcast,sizeof broadcast)) == -1) { perror("setsockopt - SO_SOCKET "); exit(1); } sendaddr.sin_family = AF_INET; sendaddr.sin_port = htons(PORT); sendaddr.sin_addr.s_addr = INADDR_ANY; memset(sendaddr.sin_zero,'\0',sizeof sendaddr.sin_zero); if(bind(sockfd, (struct sockaddr*) &sendaddr, sizeof sendaddr) == -1) { perror("bind"); exit(1); } recvaddr.sin_family = AF_INET; recvaddr.sin_port = htons(PORT); recvaddr.sin_addr.s_addr = inet_addr(DEST_ADDR); memset(recvaddr.sin_zero,'\0',sizeof recvaddr.sin_zero); while((numbytes = sendto(sockfd, "abcd", 4 , 0, (struct sockaddr *)&recvaddr, sizeof recvaddr)) != -1) { printf("Sent a packet"); sleep(1000); } perror("sendto"); exit(1); close(sockfd); return 0; } //--------------------------------------------------------------receiver.c: #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <netdb.h> #include <netinet/in.h> #define PORT 2080 #define DEST_ADDR "255.255.255.255" //broadcast addr int main(int argc, char *argv[]) { int sockfd; char buf[10]; struct sockaddr_in sendaddr; struct sockaddr_in recvaddr; int numbytes; int addr_len; int broadcast=1; if((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) == -1) { perror("socket"); exit(1); } if((setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST, &broadcast,sizeof broadcast)) == -1) { perror("setsockopt - SO_SOCKET "); exit(1); } printf("Socket created\n"); sendaddr.sin_family = AF_INET; sendaddr.sin_port = htons(PORT); sendaddr.sin_addr.s_addr = INADDR_ANY; memset(sendaddr.sin_zero,'\0', sizeof sendaddr.sin_zero); recvaddr.sin_family = AF_INET; recvaddr.sin_port = htons(PORT); recvaddr.sin_addr.s_addr = INADDR_ANY; memset(recvaddr.sin_zero,'\0',sizeof recvaddr.sin_zero); if(bind(sockfd, (struct sockaddr*) &recvaddr, sizeof recvaddr) == -1) { perror("bind"); exit(1); } addr_len = sizeof sendaddr; if ((numbytes = recvfrom(sockfd, buf, sizeof buf, 0, (struct sockaddr *)&sendaddr, (socklen_t *)&addr_len)) == -1) { perror("recvfrom"); exit(1); } printf("%s",buf); return 0; } Источник: http://www.experts-exchange.com/Networking/Protocols/Transport/UDP/Q_23074851.html
Категория: C++ | Добавил: Judge (30-05-2009)
Просмотров: 3985
| Рейтинг: 3.0 |
- Оценить -
Отлично
Хорошо
Неплохо
Плохо
Ужасно