2011-11-14 3 views
1

recvfromに電話すると、NULLsockaddr_infromに返されます。この正確なコードはデスクトップ環境で正常に動作しますが、デバイス上では正常に動作しません。Android NDK(ソケット) - recvfrom()はsockaddr *をNULLから設定します。

int MyClass::ReceiveData(char *buffer, int bufferLength) 
{ 
    int numBytes = 0; 
    struct sockaddr_in from; 
    socklen_t fromLength = sizeof(struct sockaddr_in); 
    numBytes = recvfrom(mConnectionSocket, 
         buffer, 
         bufferLength, 
         0, 
         (struct sockaddr *)&from, 
         &fromLength); 
    if (numBytes == -1) 
     perror("recvfrom"); 

    int fromAddress = ntohl(from.sin_addr.s_addr); 

    return fromAddress; 
} 

誰もが考えていますか?

+0

soファイルを含めるようにアプリを正しくパッケージしていますか?デスクトップと言うとエミュレータを意味する...? – JPM

+0

いいえ、エミュレータではなく、コンピュータのコマンドラインで実行され、同じ正確なコードを使用するプログラムを作成しました。それは私のコンピュータで 'から'正しいIPアドレスを取得しますが、何らかの理由でそれはAndroidデバイス上にはありません。 他の誰かが同じ問題を抱えていましたが、誰も修正について言及していませんでした。http://groups.google.com/group/android-developers/browse_thread/thread/6c380cadccca079b – Teclys

+0

ヘッダーコードを投稿して* .hアンドロイドNDKのあなたの使用ファイルとメイクファイルは? – JPM

答えて

0

私はNULLがそのコードでは不可能だ

'から' 私のsockaddr_inに戻って取得します。 fromは、NULLになる可能性のあるポインタではありません。おそらく、fromという名前のsockaddr_in構造体は、がゼロになっています。これはTCPソケットでこれを使用することによって発生します。これがTCPの場合は、ピアアドレスを取得するためにソケット上でgetpeername()を呼び出す必要があります。

+0

謝罪は(これはC++で考えるものの、NULLは0として定義されているので、彼らは技術的には同じものです)。いずれにせよ、問題は残っている。 'from'の結果は0です。これは、確実にTCPソケットで使用されていません。私が言ったように、このコードがコマンドラインプログラムの一部であるときにはうまく動作しますが、デバイス上にあるときは機能しません。 – Teclys

関連する問題