Androidが処理されているかどうか、またはネイティブコードに問題があるかどうか、またはその両方がわかりません。android ndkソケットネットワークに到達できない
私は(SWIGによって生成されたラッパー)C++でのUDPソケットを設定しています:
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));
が、私はエラー番号101を取得する:ネットワークが到達不能です。
私はソケットプログラミングには新しく、Androidのソケットは始めるには悪い方法だと知っていますが、実際にはこれを行い、少し時間があります。ネットワークに到達できない可能性がある理由を知っている人は誰ですか?誰かがAndroid上でUDPを使って遊んだり、光を放つことができますか?
この理由は、コードではなくネットワーク設定である可能性があります。自分のプライベートWi-Fiネットワークに接続している場合は、ルータの設定を確認する必要があります。 –
私はアームdevデバイスボード上の物理LANを使用しています。私は、デバイスからそれが話しているデバイスへの直接の専用のリンクを持っています。誰もがこの種のものを試してみたら、助けてもらえるでしょう – eskimo9
他のシステムにadbコマンドラインからpingできますか? –