CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

linux下发udp广播包的问题

楼主daphant(狒狒)2005-06-02 16:48:16 在 Linux/Unix社区 / 程序开发区 提问

以下是我的代码,  
  main()  
  {  
  struct   sockaddr_in   addrto;  
  int   s,nlen,ret;  
  int   opt=1;  
   
                  char   *smsg="this   is   a   test";  
   
                  s   =   socket(AF_INET,   SOCK_DGRAM,   0);  
                  printf("create   socket   %d\n",s);  
  bsocket=1;  
   
  addrto.sin_family=AF_INET;  
                  addrto.sin_addr.s_addr=INADDR_BROADCAST;  
  addrto.sin_port=htons(38769);  
   
  ret   =   setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char   *)&opt,sizeof(opt));  
                    printf("sock   =   %d     set   sockopt   ret   =   %d\n",s,ret);  
  nlen=sizeof(struct   sockaddr_in);  
   
                  ret=sendto(s,smsg,256,0,(struct   sockaddr*)&addrto,nlen);  
                  printf("send   boradcast   ret=%d   le=%d\n",ret,nlen);  
  }  
  此代码在windows下可以,而且在cygwin的环境下gcc编译运行也可以正常发送广播包,就是在linux下运行时sendto老是返回-1,发送失败,不知是和原因? 问题点数:50、回复次数:8Top

1 楼ssli(30岁的程序员)回复于 2005-06-02 21:17:45 得分 0

ret=sendto(s,smsg,256,0,(struct   sockaddr*)&addrto,nlen);  
  把它改为  
  ret=sendto(s,smsg,strlen(smsg),0,(struct   sockaddr*)&addrto,nlen);  
  试试Top

2 楼gettext(冰雪之崖)回复于 2005-06-03 08:22:25 得分 0

你把errno打出来不久知道原因了吗?Top

3 楼sharkhuang(走吧走吧!人总会慢慢长大~)回复于 2005-06-03 09:03:21 得分 0

对打出errno是做好的办法。协议会告诉你是什么错误Top

4 楼daphant(狒狒)回复于 2005-06-03 09:13:00 得分 0

多谢2为回答,我改成strlen(smsg),还是不行,另请问下,如何获取错误代码,我只知道windows下是WSAGetLastError,没找到linux下是什么函数?  
  还有我做了个实验,比如我linux系统ip是192.168.1.1,我可以发送192.168.1.255这样1网段内广播,但是我试图发送192.168.2.255   2网段内广播就出现问题了,那我想发送255.255.255.255这样的全网段广播,linux下又应该怎么设置呢,有代码的朋友也帮忙贴一下啊   谢谢啦Top

5 楼daphant(狒狒)回复于 2005-06-06 09:16:15 得分 0

顶起来  
  还请高手赐教,有代码的朋友能不能贴点参考参考  
  就是linux下发送个广播包就行Top

6 楼lvxn_sina(XN)回复于 2005-06-06 14:04:14 得分 0

errno不就是错误码吗?  
  全局变量Top

7 楼sourceid()回复于 2005-06-06 19:27:23 得分 0

W.Richard   Stevens写的UNP书上有例子.Top

8 楼gaoxianfeng(高)回复于 2005-06-07 10:52:53 得分 50

广播一般是子网内广播  
   
  你要先获得自己的协议栈设定的掩码  
  然后根据这个再设定你的广播域  
   
  但udp  
  如果有发255.255.255.255   一般是没有掩码设定   如在dhcp之前  
  如果发向其它网段udp广播   你至少需要有默认路由Top

相关问题

  • linux下发布web应用
  • 如何在linux下发布asp程序?
  • UDP方式下,发送端究竟有没必要绑定一个地址和端口吗?
  • Linux系统中,Weblogic下发布程序发生Exception: java.lang.NoClassDefFoundError: sun/awt/motif/MToolkit
  • 讨论一下发送短信到移动网关的丢包问题
  • UDP,包是怎么丢的??
  • udp----数据分包问题!
  • udp广播,数据分包。。。。。。。。。。
  • Qt:UDP:如何划分接收到的UDP包的界限
  • 求救!!!用CAsyncSocket实现UDP广播包!!!

关键词

  • 代码
  • linux
  • socket
  • addrto
  • 广播
  • smsg
  • nlen
  • 包
  • ret
  • sendto

得分解答快速导航

  • 帖主:daphant
  • gaoxianfeng

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo