怎样编程发送广播包?我的这段程序发送怎么返回值总是-1?

hsubo 2003-10-31 03:40:01
int main(int argc, char *argv[])
{
int s,iSend;
bool bBroadcast;
char *sMsg="This is a test";
struct sockaddr_in bcast;

s=socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
bBroadcast=true;
setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char *)&bBroadcast,sizeof(bool));
bcast.sin_family=AF_INET;
bcast.sin_addr.s_addr=0xffffffff;
bcast.sin_port=htons(5150);

iSend=sendto(s,sMsg,strlen(sMsg),0,(struct sockaddr *)&bcast,sizeof(bcast));
}
为什么iSend总是等于-1?怎么发送广播包啊? 请各位老大帮忙啊!!
...全文
138 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hsubo 2003-11-03
  • 打赏
  • 举报
回复
sorry,我没有仔细看你的程序,
原来问题出在bool bBroadcast;应该是int型。这点和windows下不同,造成出错!

感谢!!加分
hsubo 2003-11-03
  • 打赏
  • 举报
回复
但是我想用原始套接字来完成发送,所以我必须用SOCK_RAW,
请问用原始套接字怎么发送广播包?
linaxing 2003-10-31
  • 打赏
  • 举报
回复
我改了一下,你自己看吧。

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>


int main(int argc, char *argv[])
{
int s,iSend;
int bBroadcast;
char *sMsg="This is a test";
struct sockaddr_in bcast;

s=socket(AF_INET, SOCK_DGRAM, 0);
bBroadcast=1;
setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char *)&bBroadcast,sizeof(bBroadca
st));
bcast.sin_family=AF_INET;
bcast.sin_addr.s_addr=0xffffffff;
bcast.sin_port=htons(5150);

iSend=sendto(s,sMsg,strlen(sMsg),0,(struct sockaddr *)&bcast,sizeof(bcast));
printf("send:%d\n",iSend);
}
hsubo 2003-10-31
  • 打赏
  • 举报
回复
我发现问题了,
在我设置setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char *)&bBroadcast,sizeof(bool));时
其返回值为-1,也就是说我所设置的广播属性根本就没有配置成功!!

但请问为什么会设置不成功呢?,难道我创建的socket有问题? 请大家帮忙啊!!!

23,120

社区成员

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

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