【问题标题】:Sending broadcast in Linux via Sockets在 Linux 中通过 Sockets 发送广播
【发布时间】:2011-10-10 07:32:12
【问题描述】:

已解决请关闭问题(但我真的不知道如何:/糟糕的一天)

我试图通过套接字在 linux 中发送广播,它总是通过两个接口发出(我有活动的 eth0 和 eth1,都在不同的段中),但是突然间,它只是通过第一个接口 eth0 发出

代码如下:

void sendBroad(char *dstIP, char *localIP)
{
    int sock;                         /* Socket */
    struct sockaddr_in broadcastAddr; /* Broadcast address */
    int broadcastPermission;          /* Socket opt to set permission to broadcast */
    unsigned int localIPLen;       /* Length of string to broadcast */


    /* Create socket for sending/receiving datagrams */
    if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
        perror("socket() failed");

    /* Set socket to allow broadcast */
    broadcastPermission = 1;
    if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (void *) &broadcastPermission, 
          sizeof(broadcastPermission)) < 0)
        perror("setsockopt() failed");

    /* Construct local address structure */
    memset(&broadcastAddr, 0, sizeof(broadcastAddr));   /* Zero out structure */
    broadcastAddr.sin_family = AF_INET;                 /* Internet address family */
    broadcastAddr.sin_addr.s_addr = inet_addr(dstIP);   /* Broadcast IP address */
    broadcastAddr.sin_port = htons(BroadcastPort);      /* Broadcast port */

    localIPLen = strlen(localIP);  /* Find length of localIP */
    int j;
    for (j=0; j<1; j++) //doesnt mean anything so far, not important
    {
         /* Broadcast localIP in datagram to clients */
         if (sendto(sock, localIP, localIPLen, 0, (struct sockaddr *) 
               &broadcastAddr, sizeof(broadcastAddr)) != localIPLen)
             perror("sendto() sent a different number of bytes than expected");


    }
}

对这个问题有帮助吗?

提前致谢!

【问题讨论】:

  • 为了在 SO 上将问题标记为“已解决”,请创建一个答案(即自己回答问题)然后接受该答案。
  • "声望低于 100 的用户在提问后 8 小时内无法回答自己的问题。您可以在 7 小时内自行回答。在此之前,请使用 cmets,或改为编辑您的问题。"到目前为止还不能真正做到这一点
  • 我认为等待 7 小时再回答会是一个很好的解决方案。
  • 谁知道?也许到那时其他人会创建一个更好(或写得更好)的解决方案。

标签: c linux sockets networking broadcast


【解决方案1】:

您的代码一目了然。问题可能出在目标 IP 地址上。

NB 你意识到数据报是和它的源地址一起到达的吗?您也不需要将地址放入有效负载中。您可以在其中放置更具体的内容,例如应用程序标识符。

【讨论】:

    【解决方案2】:

    只需要修复广播端口,它是混合的。代码本身没问题

    【讨论】:

      猜你喜欢
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 2021-09-07
      • 2019-12-18
      • 2021-01-11
      • 2012-07-07
      相关资源
      最近更新 更多