UDP广播包的发送问题

来源:互联网 发布:wap淘宝流量来源 编辑:程序博客网 时间:2024/06/11 20:55

在拥有多个设备时,如何得知设备是否存在呢?嵌入式设备发送广播包就是一个可行的方案。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 50typedef 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抓包

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

完!

原创粉丝点击