int count = 0, len, sendlen;
struct sockaddr_in local_addr, broadcast_addr;
unsigned char sendbuf[60];
char buf[20];
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd == -1)
{
printf("socket failed\n\r");
return;
}
int opt = 1;
setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));
broadcast_addr.sin_family = AF_INET;
//broadcast_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
broadcast_addr.sin_addr.s_addr = inet_addr("255.255.255.255");
broadcast_addr.sin_port = htons(7001);
while (1)
{
len = sizeof(sendbuf);
strcpy(sendbuf, "aaaaaa");
sendlen = sendto(sockfd, sendbuf, len, 0,
(struct sockaddr *)&broadcast_addr, sizeof(struct sockaddr));
if(sendlen < 0)
{
printf("send broadcast information failed\n\r");
}
sleep(1);
}
9 个解决方案
#1
广播地址是否正确,返回什么错误信息
#2
用sendto函数发送后,返回的sendlen = -1
#3
广播的时候, 建立的socket时需要bind具体的地址, 如果多个网卡系统不知道你要发哪个
还有检查下 setsockopt 的返回值
还有检查下 setsockopt 的返回值
#4
多谢啊,我试试
#5
我绑定了,setsocket的返回值为0;
绑定代码为
memset(&local_addr, 0, sizeof(struct sockaddr_in));
local_addr.sin_family = AF_INET;
local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
local_addr.sin_port = htons(7001);
ret = bind(sockfd, (struct sockaddr*)&local_addr, sizeof(local_addr));
还是发送失败,如果是把发送地址"255.255.255.255"改成同一网段的具体ip地址,就可以发送成功,都不知道怎么回事了?
绑定代码为
memset(&local_addr, 0, sizeof(struct sockaddr_in));
local_addr.sin_family = AF_INET;
local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
local_addr.sin_port = htons(7001);
ret = bind(sockfd, (struct sockaddr*)&local_addr, sizeof(local_addr));
还是发送失败,如果是把发送地址"255.255.255.255"改成同一网段的具体ip地址,就可以发送成功,都不知道怎么回事了?
#6
自己试了下,如果把广播地址改为同网段的子网广播地址,就可以了,比如本机192.168.1.211,那么广播地址就为192.168.1.255
#7
检测下setsocketopt返回值正确么?
#8
如果多网卡请绑定发送网卡ip地址,不要用INADDR_ANY,特别是笔记本有网卡又有无线网卡的时候。
#9
多谢啊,已经自己解决了
试了下,如果把广播地址改为同网段的子网广播地址,就可以了,比如本机192.168.1.211,那么广播地址就为192.168.1.255
255.255.255.255用于主机配置过程中IP数据报的目的地址。任何情况下,路由器都不会转发数据报的,可以用192.168.255.255或192.168.1.255
试了下,如果把广播地址改为同网段的子网广播地址,就可以了,比如本机192.168.1.211,那么广播地址就为192.168.1.255
255.255.255.255用于主机配置过程中IP数据报的目的地址。任何情况下,路由器都不会转发数据报的,可以用192.168.255.255或192.168.1.255
#1
广播地址是否正确,返回什么错误信息
#2
广播地址是否正确,返回什么错误信息
#3
广播的时候, 建立的socket时需要bind具体的地址, 如果多个网卡系统不知道你要发哪个
还有检查下 setsockopt 的返回值
还有检查下 setsockopt 的返回值
#4
广播的时候, 建立的socket时需要bind具体的地址, 如果多个网卡系统不知道你要发哪个
还有检查下 setsockopt 的返回值
#5
广播的时候, 建立的socket时需要bind具体的地址, 如果多个网卡系统不知道你要发哪个
还有检查下 setsockopt 的返回值
绑定代码为
memset(&local_addr, 0, sizeof(struct sockaddr_in));
local_addr.sin_family = AF_INET;
local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
local_addr.sin_port = htons(7001);
ret = bind(sockfd, (struct sockaddr*)&local_addr, sizeof(local_addr));
还是发送失败,如果是把发送地址"255.255.255.255"改成同一网段的具体ip地址,就可以发送成功,都不知道怎么回事了?
#6
自己试了下,如果把广播地址改为同网段的子网广播地址,就可以了,比如本机192.168.1.211,那么广播地址就为192.168.1.255
#7
检测下setsocketopt返回值正确么?
#8
我绑定了,setsocket的返回值为0;
广播的时候, 建立的socket时需要bind具体的地址, 如果多个网卡系统不知道你要发哪个
还有检查下 setsockopt 的返回值
绑定代码为
memset(&local_addr, 0, sizeof(struct sockaddr_in));
local_addr.sin_family = AF_INET;
local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
local_addr.sin_port = htons(7001);
ret = bind(sockfd, (struct sockaddr*)&local_addr, sizeof(local_addr));
还是发送失败,如果是把发送地址"255.255.255.255"改成同一网段的具体ip地址,就可以发送成功,都不知道怎么回事了?
如果多网卡请绑定发送网卡ip地址,不要用INADDR_ANY,特别是笔记本有网卡又有无线网卡的时候。
#9
多谢啊,已经自己解决了
试了下,如果把广播地址改为同网段的子网广播地址,就可以了,比如本机192.168.1.211,那么广播地址就为192.168.1.255
255.255.255.255用于主机配置过程中IP数据报的目的地址。任何情况下,路由器都不会转发数据报的,可以用192.168.255.255或192.168.1.255
试了下,如果把广播地址改为同网段的子网广播地址,就可以了,比如本机192.168.1.211,那么广播地址就为192.168.1.255
255.255.255.255用于主机配置过程中IP数据报的目的地址。任何情况下,路由器都不会转发数据报的,可以用192.168.255.255或192.168.1.255