Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-服务器套接字权限被拒绝_Java_Android - Fatal编程技术网

Java Android-服务器套接字权限被拒绝

Java Android-服务器套接字权限被拒绝,java,android,Java,Android,我正在尝试在我的Android手机和我的Raspberry Pi之间建立TCP连接。应该很容易,结果不是吗? 因此,我开始用ServerSocket编写一个简单的服务器。 它不起作用,所以我减少了代码,直到我得到了这篇不起作用的文章: try { String wifiip = wifiIpAddress(this); Log.v("SERVER", wifiip); ServerSocket serverSocket = new

我正在尝试在我的Android手机和我的Raspberry Pi之间建立TCP连接。应该很容易,结果不是吗? 因此,我开始用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();
    }
(代码位于AndroidStudio创建的myMainActivity中的onCreate方法中)

我还尝试使用此方法创建ServerSocket,但没有成功

ServerSocket serverSocket = new ServerSocket(4117);
wifiIpAddress方法取自此处: 而且效果很好

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,Android 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
java.net.SocketException:socket失败:EACCES(权限被拒绝)
W/System.err﹕ 位于libcore.io.IoBridge.socket(IoBridge.java:632)
W/System.err﹕ 在java.net.PlainSocketImpl.create(PlainSocketImpl.java:198)
W/System.err﹕ 在java.net.PlainServerSocketImpl.create(PlainServerSocketImpl.java:38)
W/System.err﹕ 位于java.net.ServerSocket。(ServerSocket.java:64)
W/System.err﹕ 在eu.therealskynet.socketstest.MainActivity.onBtSendClicked上(MainActivity.java:47)
W/System.err﹕ 位于java.lang.reflect.Method.invoke(本机方法)
W/System.err﹕ 位于java.lang.reflect.Method.invoke(Method.java:372)
W/System.err﹕ 在android.view.view$1.onClick上(view.java:4078)
W/System.err﹕ 在android.view.view.performClick(view.java:4832)
W/System.err﹕ 在android.view.view$PerformClick.run(view.java:19839)
W/System.err﹕ 位于android.os.Handler.handleCallback(Handler.java:739)
W/System.err﹕ 位于android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err﹕ 位于android.os.Looper.loop(Looper.java:211)
W/System.err﹕ 位于android.app.ActivityThread.main(ActivityThread.java:5333)
W/System.err﹕ 位于java.lang.reflect.Method.invoke(本机方法)
W/System.err﹕ 位于java.lang.reflect.Method.invoke(Method.java:372)
W/System.err﹕ 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016)上
W/System.err﹕ 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
W/System.err﹕ 原因:android.system.ErrnoException:套接字失败:EACCES(权限被拒绝)
W/System.err﹕ 位于libcore.io.Posix.socket(本机方法)
W/System.err﹕ 位于libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282)
W/System.err﹕ 位于libcore.io.IoBridge.socket(IoBridge.java:617)
W/System.err﹕ ... 还有17个

我甚至不知道“socketfailed:EACCES(Permission denied)”应该告诉我什么…

我将自己发布答案

问题是这是区分大小写的:

ANDROID.PERMISSION.INTERNET
必须这样写:

android.permission.INTERNET

你的应用程序是否具有
INTERNET
权限?请尝试。我认为它区分大小写。谢谢Daniel Bo!这就是问题所在。(Android Studio,你可以告诉我,真的:/)你能把这个作为一个答案发布,这样我就可以接受了吗?“代码位于onCreate方法中”。那是行不通的。此类代码应在线程或异步任务中执行。'ServerSocket ServerSocket=new ServerSocket(4117);'。那更好。不要将其绑定到Android服务器的wifi地址。你为什么要这么做?