16 UDP廣播示例

1. 例程如下


#include "socket_includes.h"




int main(int argc, char *argv[])
{
	int sockfd;
	struct sockaddr_in server, client, broadcast;
	char buf[200]="hello.brocast.", read_buf[100];
	char dest[20];
	unsigned int len, length;	
	socklen_t len1;
	int rv;
	time_t timep;
	int on = 1;
	
	
	sockfd = socket(AF_INET, SOCK_DGRAM, 0);
	if(sockfd < 0){
		perror("Create socket fail.");
		return -1;
	}		

	if(setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on))<0){
		perror("setsockopt:");
		return -1;
	}
	
	bzero(&server, sizeof(server));
	server.sin_family = AF_INET;
	server.sin_port   = htons(8888);
	server.sin_addr.s_addr  = htonl(INADDR_ANY);
  
	bzero(&broadcast, sizeof(broadcast));
	broadcast.sin_family = AF_INET;
	broadcast.sin_port   = htons(8888);
	broadcast.sin_addr.s_addr  = inet_addr("192.168.1.255");
	
	len = sizeof(struct sockaddr);
	if(bind(sockfd, (struct sockaddr *)&server, len)<0){
		perror("bind error.");
		return -1;
	}
	len1 = sizeof(struct sockaddr_in);
	rv = sendto(sockfd, buf, strlen(buf), 0,
			(struct sockaddr *)&broadcast, len);
	if(rv < 0){
		perror("sendto:");
		return -1;
	}
  
  while(1){
	  rv = recvfrom(sockfd, read_buf, 100, 0, 
		  (struct sockaddr *)&client, &length);
	  if(rv < 0){
		  printf("recvfrom error.\n");
		  close(sockfd);
		  return -1;
	  }
	  printf("len: %d\n", rv);
	  printf("ip: %s, port:%d\n", inet_ntop(AF_INET, &client.sin_addr, dest, 20), ntohs(client.sin_port));
	  printf("read_buf:%s\n", read_buf);
  
	  timep = time(NULL);
	  snprintf(buf, sizeof(buf), "%s", ctime(&timep));
  
	  sendto(sockfd, buf, strlen(buf), 0,
		  (struct sockaddr*)&broadcast, length);
	  bzero(&client, length);
	  bzero(buf, 200);
	  bzero(read_buf, 100);
	  sleep(1);
  }

	close(sockfd);
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章