求一linux接收udp广播程序(提供模板)

#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<string.h>#include<sys/ty... #include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/wait.h>

#define MYPORT 4950
main(int argc,char * argv[])
{
int sockfd;
struct sockaddr_in my_addr; /* my address information */
struct sockaddr_in their_addr; /* connector's address information */
int addr_len, numbytes;
char buf[100];
int bBroadcast=1,i;

unsigned short port;

port = (unsigned short)MYPORT;
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
perror("socket");
exit(1);
}
my_addr.sin_family = AF_INET; /* host byte order ,AF_INET表示IpV4*/
my_addr.sin_port = htons(port); /* short, network byte order ,将端口转为网络序*/
my_addr.sin_addr.s_addr = htonl(INADDR_ANY); /* auto-fill with my IP ,INADDR_ANY表示所有IP均可接入*/
//bzero(&(my_addr.sin_zero), 8); /* zero the rest of the struct */
memset(&(my_addr.sin_zero),0,8);
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,(const char*)&bBroadcast,sizeof(bBroadcast));
while(1)
{
addr_len = sizeof(struct sockaddr);
/* 用recvfrom阻塞接收数据 ,their_addr存放是远端的机器的IP和端口*/
if ((numbytes=recvfrom(sockfd, buf, 100, 0, (struct sockaddr *)&my_addr, &addr_len)) == -1) {
perror("recvfrom");
exit(1);
}

printf("packet contains \"%s\"\n",buf);
}

close(sockfd);
}

要求:运行这个程序,能够输出网络中人家广播的内容,
注:任何人广播的都能检测接收 并打印出来,
可以自己写,可以修改这个,急求!语言要求c/c++
希望测试过,我拿来能直接用最好,因为我写了好几个程序都不能接收到,可能是哪儿设置有问题,自己不想在测试了!!

我要接收的是255.255.255.255的广播包
展开
 我来答
FamDestiny
2009-08-17 · TA获得超过610个赞
知道小有建树答主
回答量:244
采纳率:100%
帮助的人:123万
展开全部
哥们,没bind你收啥?你又把my_addr传给recvfrom干啥(该传their_addr).
我给你写了个

#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

int main()
{
int n, fd;
socklen_t cli_addr_len;
char buf[1024] = {0};
struct sockaddr_in servaddr, cliaddr;

if((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
printf("socket error!\n");
exit(0);
}

servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(9999);

bind(fd, (struct sockaddr *)&servaddr, sizeof(servaddr));
while(1)
{
cli_addr_len = sizeof(cliaddr);
n =recvfrom(fd, buf, 1024, 0, (struct sockaddr *)&cliaddr, &cli_addr_len);
printf("%d\n", n);
}
}

这个程序只能收到发往本机IP地址和广播地址的端口为9999的数据包,如果你要监听局域网中的所有广播包(任意端口),可以用原始套接字,我前两天正好写了个,功能很强大哦:),已经是个嗅探器了,你用的时候加上 -u 选项就可以了。
famdestiny.cublog.cn
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
jiangtao9999
2009-08-14 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1.2万
采纳率:44%
帮助的人:8385万
展开全部
找个好用的开源媒体播放器软件拿来参考吧……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
踏岸寻柳
2009-08-14 · TA获得超过6912个赞
知道小有建树答主
回答量:1776
采纳率:0%
帮助的人:656万
展开全部
找找飞鸽传书的源代码吧,可以满足你的要求。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式