java.net.SocketException_ socket failed_ EPERM (Operation not permitted)

java.net.SocketException_ socket failed_ EPERM (Operation not permitted)

## 问题描述

一开始我是写一个网络请求,但是忘记添加网络权限了,运行后看日志出现权限问题,根据提示添加网络权限。

uses-permission android:name=“android.permission.INTERNET”

但是问题来了,我运行程序后,还是出现问题,问题如下。

2019-09-30 15:29:39.950 21300-21356/com.yezijie.wanandroid W/System.err: java.net.SocketException: socket failed: EPERM (Operation not permitted)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at java.net.Socket.createImpl(Socket.java:492)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at java.net.Socket.getImpl(Socket.java:552)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at java.net.Socket.setSoTimeout(Socket.java:1180)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:143)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:248)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:211)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:30)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at com.yezijie.wanandroid.util.HttpUtil.sendHttpRequest(HttpUtil.java:41)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at com.yezijie.wanandroid.MainActivity$1.run(MainActivity.java:49)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid W/System.err:     at java.lang.Thread.run(Thread.java:919)
2019-09-30 15:29:39.951 21300-21356/com.yezijie.wanandroid D/MainActivity: onCreate: socket failed: EPERM (Operation not permitted)


解决方法

网上很多人说不仅要添加网络访问权限,还需要添加网络状态权限,

uses-permission android:name=“android.permission.ACCESS_NETWORK_STATE”

经我验证,这种方法是行不通的,即使添加后还是出现这情况,所以与这个权限没有半毛钱关系。

后来我 卸载了程序重新安装 ,竟然就能正常运行了,是的,你没听错,就是这么简单粗暴!为了验证是什么回事,我重复操作多遍,将程序还原原来的样子卸载后重新安装,发现导致这原因是:一开始网络请求时我没有赋予网络权限,我重新给程序赋予权限时我并没有卸载程序,只是重新编译,系统并没有获取到配置文件中的权限,因此需要卸载重新安装。这是我个人理解,如有错误,欢迎留言指出,谢谢!


评论区

  目录