【发布时间】:2010-06-01 13:21:49
【问题描述】:
我在 Ubuntu 9.10 中使用 BSD 套接字通过以下代码以广播方式发送 UDP 数据包:
sock_fd = socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
//sock_fd=socket(AF_INET,SOCK_DGRAM,0);
receiver_addr.sin_family = PF_INET;
//does not send with broadcast in ad hoc
receiver_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
inet_aton("169.254.255.255",&receiver_addr.sin_addr);
receiver_addr.sin_port = htons(port);
int broadcast = 1;
// this call is what allows broadcast packets to be sent:
if (setsockopt(sock_fd, SOL_SOCKET, SO_BROADCAST, &broadcast,
sizeof broadcast) == -1) {
perror("setsockopt (SO_BROADCAST)");
exit(1);
}
ret=sendto(sock_fd, packet, size, 0,(struct sockaddr*)&receiver_addr,sizeof(receiver_addr));
注意不是全部的代码,只是有一个想法。
如果我连接到基础设施无线网络,程序会使用 INADDR_BROADCAST 发送所有数据。但是,如果我的笔记本电脑连接到 ad-hoc 网络,它能够接收所有数据,但不能发送数据。我已经解决了使用169.254.255.255广播地址的问题,但是我想知道是怎么回事。
提前谢谢你!
【问题讨论】:
-
“不发送”表示函数返回错误,或者网络上的其他机器看不到数据包?
-
尝试 tcpdump 或 wireshark 并告诉我们发生了什么事.. 你如何得出不能发送数据包的结论?
-
它返回 -1... 抱歉回复晚了!
标签: c linux networking ubuntu-9.10 sockets