简体   繁体   English

服务器套接字获取错误权限拒绝异常android

[英]Server socket getting an error permission denied exception android

I have searched a lot on internet and a lot of people had the same problem as mine but none of them solved my problem. 我在互联网上进行了很多搜索,很多人都遇到了与我相同的问题,但没有一个人解决了我的问题。

I have tested this code on genymotion emulater and it worked but on real Android device ie Nexus 4 API 21 it didn't. 我已经在genymotion模拟器上测试了此代码,并且可以运行,但是在真正的Android设备(即Nexus 4 API 21)上却没有。

This is my code in which I got an exception in line ServerSocket=new ServerSocket(11100); 这是我的代码,其中ServerSocket = new ServerSocket(11100)行中有一个异常;

    protected String doInBackground(Void... params) {

    Socket socket = null;
    DataInputStream dataInputStream = null;
    // DataOutputStream dataOutputStream = null;

    try {

        Log.i("aa","making a new server socket");
        serverSocket = new ServerSocket(11100);

            serverSocket.setSoTimeout(16000);

            Log.i("service","listening to port");
            socket = serverSocket.accept();
            Log.i("service","connection accepted");
            dataInputStream = new DataInputStream(
                    socket.getInputStream());


            String messageFromServer = "";
            BufferedReader br = new BufferedReader(new        InputStreamReader(socket.getInputStream()));
            messageFromServer = br.readLine();
            Log.i("","trying to close server socket");
            serverSocket.close();
            Log.i("","server socket is closed");
            return messageFromServer;

    } catch(SocketTimeoutException e){//in case of a timeout exception

        Log.i("","timeout exception ");
    }catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();


    }finally {
        if (socket != null) {
            try {
                socket.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        if (dataInputStream != null) {
            try {
                dataInputStream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    return "1"; //means connection failed
} 

And this is my android manifest 这是我的Android清单

<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.internet"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">

    <service android:name="com.example.hassan.chat.services.MyService" />
    <activity
        android:name=".LoginActivity"
        android:label="@string/app_name"
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main">

    </activity>
    <activity
        android:name=".SignInActivity"
        android:label="@string/title_activity_sign_in"
        android:parentActivityName=".LoginActivity">
    </activity>

</application>

And this is my logcat 这是我的logcat

    04-10 20:17:00.178  11984-12213/com.example.hassan.chat W/System.err﹕ java.net.SocketException: socket failed: EACCES (Permission denied)
    04-10 20:17:00.179  11984-12213/com.example.hassan.chat W/System.err﹕ at libcore.io.IoBridge.socket(IoBridge.java:623)
    04-10 20:17:00.179  11984-12213/com.example.hassan.chat W/System.err﹕ at java.net.PlainSocketImpl.create(PlainSocketImpl.java:198)
    04-10 20:17:00.179  11984-12213/com.example.hassan.chat W/System.err﹕ at java.net.PlainServerSocketImpl.create(PlainServerSocketImpl.java:38)
    04-10 20:17:00.179  11984-12213/com.example.hassan.chat W/System.err﹕ at java.net.ServerSocket.<init>(ServerSocket.java:103)
    04-10 20:17:00.179  11984-12213/com.example.hassan.chat W/System.err﹕ at java.net.ServerSocket.<init>(ServerSocket.java:74)
    04-10 20:17:00.180  11984-12213/com.example.hassan.chat W/System.err﹕ at com.example.hassan.chat.classes.ListeningHttpSocket.doInBackground(ListeningHttpSocket.java:63)
    04-10 20:17:00.180  11984-12213/com.example.hassan.chat W/System.err﹕ at com.example.hassan.chat.classes.ListeningHttpSocket.doInBackground(ListeningHttpSocket.java:39)
    04-10 20:17:00.180  11984-12213/com.example.hassan.chat W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
    04-10 20:17:00.180  11984-12213/com.example.hassan.chat W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    04-10 20:17:00.180  11984-12213/com.example.hassan.chat W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    04-10 20:17:00.180  11984-12213/com.example.hassan.chat W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    04-10 20:17:00.180  11984-12213/com.example.hassan.chat W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    04-10 20:17:00.181  11984-12213/com.example.hassan.chat W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
    04-10 20:17:00.181  11984-12213/com.example.hassan.chat W/System.err﹕ Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied)
    04-10 20:17:00.181  11984-12213/com.example.hassan.chat W/System.err﹕ at libcore.io.Posix.socket(Native Method)
    04-10 20:17:00.182  11984-12213/com.example.hassan.chat W/System.err﹕ at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282)
    04-10 20:17:00.182  11984-12213/com.example.hassan.chat W/System.err﹕ at libcore.io.IoBridge.socket(IoBridge.java:608)
    04-10 20:17:00.182  11984-12213/com.example.hassan.chat W/System.err﹕ ... 12 more

for anyone interest : i found the solution ,in the android manifest the internet permission should be in capital 对于任何感兴趣的人:我找到了解决方案,在android清单中,互联网许可应大写
uses-permission android:name="android.permission.INTERNET" and not uses-permission android:name="android.permission.internet" 使用权限android:name =“ android.permission.INTERNET”,而不使用权限android:name =“ android.permission.internet”

手机是否与服务器连接在同一网络上?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM