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

时间:2015-04-10 17:36:11

标签: android sockets

我在互联网上搜索了很多,很多人遇到了和我一样的问题,但没有一个能解决我的问题。

我已经在genymotion emulater上测试了这段代码,但它在真正的Android设备上工作,即Nexus 4 API 21,它没有。

这是我的代码,其中我在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
} 

这是我的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>

这是我的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

2 个答案:

答案 0 :(得分:2)

任何有兴趣的人: 我找到了解决方案,在android清单中,互联网权限应该在资本中       uses-permission android:name =“android.permission.INTERNET”而不是       uses-permission android:name =“android.permission.internet”

答案 1 :(得分:0)

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