为何广播失败?

wmrwinhap 2004-06-29 12:31:27
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <errno.h>

int main()
{
int sock=socket(PF_INET,SOCK_DGRAM,0);
if(sock==-1) printf("Create socket error !\r\n");
else {
struct sockaddr_in addr;
int nBroadcast=1; // enable broadcast
setsockopt(sock,SOL_SOCKET,SO_BROADCAST,&nBroadcast,sizeof(int));
addr.sin_family=PF_INET;
addr.sin_addr.s_addr=0;
addr.sin_port=htons(6068);
if(bind(sock,(struct sockaddr*)&addr,sizeof(struct sockaddr))==-1) printf("Bind on port 68 fail.\r\n");
else {
char buf[256];
int nLen;
addr.sin_family=PF_INET;
addr.sin_addr.s_addr=htonl(INADDR_BROADCAST);
addr.sin_port=htons(1067);
strcpy(buf,"send some thing through broadcast udp !");
nLen=sendto(sock,buf,strlen(buf),0,(struct sockaddr*)&addr,sizeof(struct sockaddr));
if(nLen<0) printf("sendto fail. errno=%d\r\n",errno);
else printf("sendto return %d\r\n",nLen);
close(sock);
}
}
return 0;
}

结果为何发送失败?
errno等于101(网络不可到达?)


...全文
174 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wmrwinhap 2004-06-30
  • 打赏
  • 举报
回复
谢谢,我也找到问题了。

你说的没错,我的网段是168.168.0.0,没设置网关的话,只能向本子网168.168.255.255发包才能成功。设置了默认网关的话,才可以向全网广播。
bshawk 2004-06-29
  • 打赏
  • 举报
回复
看看你的INADDR_BROADCAST是多少?!printf看一下??
blankman 2004-06-29
  • 打赏
  • 举报
回复
可能是网段不对,你看看你的网络地址是多少

网络地址 = IP地址&子网掩码
192.168.0.0 = 192.168.0.1 & 255.255.255.0

如果像例子那样的花,你发送的时候应该是 192.168.0.255
不同的子网是收不到的,除非你设置了混杂模式来抓包

你试一下
wmrwinhap 2004-06-29
  • 打赏
  • 举报
回复
急! 在线等待 !
wmrwinhap 2004-06-29
  • 打赏
  • 举报
回复
是 0xFFFFFFFF 没错呀, htonl(INADDR_BROADCAST)也等于0xFFFFFFFF,没错的。
我是发广播,不是发向某个固定地址的

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧