2011-11-14 10 views
1

當我使用Android NDK調用recvfrom,我得到NULL回到了我的sockaddr_infrom。同樣的確切代碼在我的桌面環境中工作正常,但不在設備上。的Android NDK(套接字) - recvfrom的()從空的sockaddr *設置(不能發送的獲取IP)

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

您是否正確打包應用程序以包含此文件?當你說桌面你的意思是模擬器...? – JPM

+0

不,不是仿真器,我構建了一個程序,該程序在我的計算機上的命令行中運行,並使用相同的確切代碼。它在我的電腦的'from'中獲得正確的IP地址,但由於某些原因,它不會在Android設備上。 有人曾經有過相同的問題,但沒有人提到過修正:http://groups.google.com/group/android-developers/browse_thread/thread/6c380cadccca079b – Teclys

+0

您可以發佈您的標題代碼,以查看哪些* .h你的使用和你的製作文件爲Android NDK? – JPM

回答

0

我收到NULL '從'

這是不可能與該代碼返回給我sockaddr_in的。 from不是可以變成NULL的指針。更可能你的sockaddr_in結構被from命名爲歸零。這可能是由於在TCP套接字上使用這個引起的。如果這是TCP,則應該在套接字上調用getpeername()以獲取對等地址。

+0

道歉誤參照0作爲NULL(雖然考慮這是C++,NULL被定義爲0,所以他們在技術上相同的東西)。無論如何,問題依然存在。 'from'中的結果是0.這肯定不會在TCP套接字上使用。正如我所說的,當代碼是命令行程序的一部分時,它可以正常工作,但它在設備上不起作用。 – Teclys

相關問題