ZJE_ANDY 2017-01-04 20:46 采纳率: 50%
浏览 1867
已采纳

Linux平台C语言关于UDP广播的问题。

首先,我写了一个非常简单的UDP服务端,我看了看,是IP地址写的问题,(下面详细代码),
当我有inet_addr("192.168.152.128")的时候,是不能成功收到信息的,但我用
htonl(INADDR_ANY)的时候,却是可以收到信息,为什么?(我的客户端是用广播地址:192.168.152.255)

 #include"myhead.h"
char rbuf[50];
char wbuf[50];


int main()
{
    int udp,size,len,opt=1;
    struct sockaddr_in laddr;
    struct sockaddr_in raddr;

    laddr.sin_family = AF_INET;
    laddr.sin_port = htons(8888);
    laddr.sin_addr.s_addr = inet_addr("192.168.152.128");//疑惑在这里

    size = sizeof(struct sockaddr_in);
    udp = socket(AF_INET,SOCK_DGRAM,0);
    setsockopt(udp,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof opt);
    bind(udp,(struct sockaddr*)&laddr,size);

    len=sizeof(struct sockaddr);
    while(1)
    {
        recvfrom(udp,rbuf,50,0,(struct sockaddr*)&raddr,&len);
        printf("%s\n",rbuf);
        bzero(rbuf,50);
    }
}



展开全部

  • 写回答

2条回答 默认 最新

  • 小邓在路上 2017-01-04 21:19
    关注

    正常就是需要设置成这样,广播有两种方式,一种是全网广播,一种是局域网广播,你的客户使用的是全网的广播,全网广播就意味着会走路由
    所以到达你的这个机器,不一定是从什么IP过来的,如果你只是监听了固定的IP,就是有可能收不到,只有主机地址全监听才能收到,you get!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥60 Python+pygame坦克大战游戏开发实验报告
  • ¥15 R语言regionNames()和demomap()无法选中中文地区的问题
  • ¥15 Open GL ES 的使用
  • ¥15 我如果只想表示节点的结构信息,使用GCN方法不进行训练可以吗
  • ¥15 QT6将音频采样数据转PCM
  • ¥15 本地安装org.Hs.eg.dby一直这样的图片报错如何解决?
  • ¥15 下面三个文件分别是OFDM波形的数据,我的思路公式和我写的成像算法代码,有没有人能帮我改一改,如何解决?
  • ¥15 Ubuntu打开gazebo模型调不出来,如何解决?
  • ¥100 有chang请一位会arm和dsp的朋友解读一个工程
  • ¥15 查询优化:A表100000行,B表2000 行,内存页大小只有20页,运行时3页,设计两个表等值连接的最简单的算法