2015-09-23 213 views
4

我正嘗試在我的Android手機和我的Raspberry Pi之間建立一個TCP連接。應該很容易,事實證明它不是? 所以我開始用ServerSocket寫一個簡單的服務器。 它沒有工作,所以我減少了代碼,直到我得到這個件,它是不工作:Android - ServerSocket權限被拒絕

try 
    { 
     String wifiip = wifiIpAddress(this); 
     Log.v("SERVER", wifiip); 

     ServerSocket serverSocket = new ServerSocket(); 
     serverSocket.setReuseAddress(true); 
     serverSocket.bind(new InetSocketAddress(wifiip, 4117)); 
    }catch (Exception ex) 
    { 
     ex.printStackTrace(); 
    } 

(代碼位於的onCreate方法在我MainActivity這是由AndroidStudio創建)

我也嘗試用這種方法創建ServerSocket沒有成功。

ServerSocket serverSocket = new ServerSocket(4117); 

的方法wifiIpAddress從這裏拍攝:https://stackoverflow.com/a/18638588/2394967 和工作得很好。

AndroidManifest.xml中

<manifest ...> 
<uses-sdk android:targetSdkVersion="21"></uses-sdk> 
<uses-permission android:name="ANDROID.PERMISSION.INTERNET"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 
... 
</manifest> 

也許有用信息:

  • 我上的ArchLinux運行AndroidStudio
  • 我使用新的,不變的項目
  • 嘗試我嘗試了不同的端口(1024以上)
  • 我是一個真正的設備上運行的應用程序(的Xperia Z,安卓5.0.2)
  • 我試圖在另一個線程

運行的ServerSocket logcat的

java.net.SocketException: socket failed: EACCES (Permission denied) 
W/System.err﹕ at libcore.io.IoBridge.socket(IoBridge.java:632) 
W/System.err﹕ at java.net.PlainSocketImpl.create(PlainSocketImpl.java:198) 
W/System.err﹕ at java.net.PlainServerSocketImpl.create(PlainServerSocketImpl.java:38) 
W/System.err﹕ at java.net.ServerSocket.<init>(ServerSocket.java:64) 
W/System.err﹕ at eu.therealskynet.socketstest.MainActivity.onBtSendClicked(MainActivity.java:47) 
W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method) 
W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372) 
W/System.err﹕ at android.view.View$1.onClick(View.java:4078) 
W/System.err﹕ at android.view.View.performClick(View.java:4832) 
W/System.err﹕ at android.view.View$PerformClick.run(View.java:19839) 
W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:739) 
W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95) 
W/System.err﹕ at android.os.Looper.loop(Looper.java:211) 
W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5333) 
W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method) 
W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372) 
W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016) 
W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811) 
W/System.err﹕ Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied) 
W/System.err﹕ at libcore.io.Posix.socket(Native Method) 
W/System.err﹕ at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282) 
W/System.err﹕ at libcore.io.IoBridge.socket(IoBridge.java:617) 
W/System.err﹕ ... 17 more 

我甚至不知道什麼「套接字失敗:EACCES(Permission denied)」應該告訴我...

+0

請問您的應用程序有'INTERNET'許可? – CommonsWare

+1

嘗試我認爲它是區分大小寫的。 –

+0

謝謝Daniel Bo!這是問題。 (Android Studio,你可以告訴我,真的:/)你可以發佈這個答案,所以我可以接受它嗎? – Skynet

回答

3

我只是自己發佈答案。

的問題是,這是區分大小寫

ANDROID.PERMISSION.INTERNET 

,並且必須這樣寫的:

android.permission.INTERNET