UDP广播包的发送问题

在拥有多个设备时,如何得知设备是否存在呢?嵌入式设备发送广播包就是一个可行的方案。UDP广播包,打包buf中信息为设备的信息。然后通过UDP广播到网络中。

话不多说,直接给出广播包的源代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/select.h>
#include <sys/types.h>
#include <sys/socket.h>

#define MAXLINE 50

typedef struct sockaddr SA;

int main(int argc, char *argv)
{
	int sockfd,ret;
	struct sockaddr_in targetaddr;
	char buf_snd[MAXLINE] = "Hello, I am 48!";
	int broadcast;
	
	if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
	{
		perror("socket failed!");
		exit(-1);
	}
	
	broadcast = 1;
	
	if((ret = setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast))) < 0)
	{
		perror("setsockopt failed");
		exit(-1);
	}
	
	bzero(&targetaddr, sizeof(targetaddr));
	targetaddr.sin_family = AF_INET;
	targetaddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
	targetaddr.sin_port = htons(8888);
	
	while(1)
	{
		sleep(1);
		if((ret = sendto(sockfd, buf_snd, sizeof(buf_snd), 0, (SA *)&targetaddr, sizeof(targetaddr))) < 0)
		{
			perror("sendto failed");
			exit(-1);
		}
		printf("sendto (broadcast) successed\n");
	}
	
	return 0;
}




进行arm-linux-gcc交叉编译后,放进开发板运行、发现无法运行?
报了一个网络不存在的错误、用route命令、ifconfig命令看一下网络的状态
广播的功能是有的,但是发现网关的设置却是空的,那么原因就是没有设置网关导致的。
设置网关:
然后再运行

主机端通过wireshark抓包

这样开发板的广播包程序就写好了、

完!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值