android ad-hoc udp broadcast挂起发送(ndk)

时间:2014-02-02 20:31:02

标签: android c android-ndk udp

我正在尝试使用本机c代码在我的ad-hoc网络 - 192.168.2.x中发送广播消息。 但应用程序挂起sendto()。顺便说一句,挂起没有连接到while,包装它,正如我在调试中看到的那样,它只尝试sendto()并挂起。 我的代码有问题吗?

int broadcast(char* msg){
    int bcast_sock;
    struct sockaddr_in their_addr; // connector's address information
    if((bcast_sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
    {
        LOGE("ERROR BROADCASTING , socket wasn't created");
    }

    int broadcastEnable=1;
    int ret=setsockopt(bcast_sock, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable));
    if(ret < 0)
    {
        LOGE("ERROR BROADCASTING, Coulnt set broadcast enable through socket options");
    }


    their_addr.sin_family = AF_INET;     // host byte order
    their_addr.sin_port = htons(BROADCAST_PORT); // short, network byte order
    their_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
    memset(&(their_addr.sin_zero), '\0', 8); // zero the rest of the struct

    while(-1 == (int)sendto(bcast_sock, msg, strlen(msg), 0,
        (struct sockaddr *)&their_addr, sizeof(struct sockaddr)));
    return 0;
}

几点说明:

  • 这当然是扎根手机。
  • 如果我使用java广播进行广播,它可以正常工作,我可以接收广播,即:

    datagramSocket.setBroadcast(true);
    int receiverPort = 4949;
    sendPacket = new DatagramPacket(data, data.length, IPAddress, receiverPort);
    
  • 还使用本机代码发送和接收非广播消息。

  • CPU使用率变为~95%。
  • 我也尝试过简单地发送到192.168.2.255。

任何想法?

1 个答案:

答案 0 :(得分:0)

我通过更改地址转换解决了这个问题:

their_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);

inet_aton(IP,&their_addr.sin_addr);

其中IP = "192.168.2.1"

感谢帮助epx