16 UDP广播示例

本文介绍了一个使用C语言实现的UDP广播程序示例。该程序创建了一个UDP套接字,并设置选项允许进行广播。接着,它绑定到本地地址并发送消息到指定的广播地址。程序还接收从客户端发来的回应,并将回应的消息打印出来。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值