簡體   English   中英

Android NDK套接字無法連接

[英]android ndk sockets Network Unreachable

我不知道這是否是我處理Android的方式,還是我的本機代碼有問題,或兩者兼而有之。

我正在C ++中設置udp套接字(由swig生成的包裝器):

udpSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
        if (udpSocket < 0)
        {
            pthread_mutex_unlock(&csOpenCloseUdp);
            throw IOException("Failed to open socket");
        }


        char bAllowMultiple = true;
        setsockopt(udpSocket, SOL_SOCKET, SO_REUSEADDR, &bAllowMultiple, sizeof(bAllowMultiple));
        setsockopt(udpSocket, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&hopLimit, sizeof(hopLimit));
        setsockopt(udpSocket, IPPROTO_IP, IP_MULTICAST_IF, (char *)&localAddr, sizeof(localAddr));

        // Set to non-blocking mode
        unsigned long bMode = 1;
        ioctl( udpSocket, FIONBIO, &bMode );

        // Create the local endpoint
        sockaddr_in localEndPoint;
        localEndPoint.sin_family = AF_INET;
        localEndPoint.sin_addr.s_addr = localAddr.s_addr;
        localEndPoint.sin_port = groupEndPoint.sin_port;

        // Bind the socket to the port
        int r = bind(udpSocket, (sockaddr*)&localEndPoint, sizeof(localEndPoint));
        if (r == SOCKET_ERROR)
        {
            //LeaveCriticalSection(&csOpenCloseUdp);
            pthread_mutex_unlock(&csOpenCloseUdp);
            close();
            throw IOException("Failed to bind port");
        }


        // Join the multicast group
        struct ip_mreq imr;
        imr.imr_multiaddr = groupEndPoint.sin_addr;
        imr.imr_interface.s_addr = localAddr.s_addr;
        setsockopt(udpSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&imr, sizeof(imr));

套接字不會引發任何異常,在此之后它具有一些值INVALID_SOCKET。

當我嘗試發送數據包時,

int r = sendto(udpSocket, (char*)dataToSend, (size_t)length, 0, (sockaddr*)&groupEndPoint, (socklen_t)sizeof(groupEndPoint));

我得到errno 101:網絡無法訪問。

我是套接字編程的新手,我知道Android中的套接字是一個不好的開始方式,但是事實是我必須完成這項工作,而且時間很少。 這里有人知道網絡不可達的可能原因嗎? 有沒有人嘗試過在Android上使用UDP並可以說明一些問題?

是否有使用C ++套接字的要求? 如果可能的話,為了時間的利益,並且為了一切的利益,我建議使用Java API。 以下是使用方法的示例: http : //android-er.blogspot.com/2011/01/simple-communication-using.html 我喜歡C,但是建議不要在這里使用它。

解決了:

我只需要研究設備上的以太網設置,就可以與筆記本電腦通話。 由於某種原因,它不喜歡使用專用鏈接,因此我正在使用本地網絡路由器,並且該路由器正在工作。 現在遇到了不同的問題,但這已經完成了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM