java - Android Socket 连接(权限被拒绝)

标签 java android sockets

我正在尝试从andriod 连接到简单的java 服务器。服务器正在运行,如果我确实从 adb 连接,请查看连接 adb connect 127.0.0.1:4444 甚至使用 pc ip adb connect 192.168.1.104:4444 但android得到java.net.SocketException:套接字失败:EACCES(权限被拒绝)。 PC和Android在单个WIFI路由器中。

我的服务器

public class Server {

    private static ServerSocket serverSocket;
    private static Socket clientSocket;
    private static InputStreamReader inputStreamReader;
    private static BufferedReader bufferedReader;
    private static String message;
    private static String serverIp = "10.0.2.15";

    public static void main(String[] args) {
        try {

            serverIp = getServerIp();

            if(serverIp != null){

                System.out.println("Listenning on IP:" + serverIp);

            }

            serverSocket = new ServerSocket(4444); // Server socket

        } catch (IOException e) {
            System.out.println("Could not listen on port: 4444  " + e.toString());
        }

        System.out.println("Server started. Listening to the port 4444");

        while (true) {
            try {


                clientSocket = serverSocket.accept(); // accept the client connection


                if(clientSocket.getInputStream().read() != -1){

                    System.out.println("Socket connection");

                } else {

                    System.out.println("Client disconected");

                }

                inputStreamReader = new InputStreamReader(clientSocket.getInputStream());
                bufferedReader = new BufferedReader(inputStreamReader); // get the client message
                message = bufferedReader.readLine();

                System.out.println(message);
                inputStreamReader.close();
                clientSocket.close();

            } catch (IOException ex) {
                System.out.println("Problem in message reading  " + ex.toString());
            }
        }

    }

    public static String getServerIp(){

        try{

            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
                    en.hasMoreElements();){
                NetworkInterface intf = en.nextElement();
                for (Enumeration<InetAddress> enumIpAdress = intf.getInetAddresses();
                        enumIpAdress.hasMoreElements();){

                        InetAddress inetAddress = enumIpAdress.nextElement();
                        if(!inetAddress.isLoopbackAddress()){

                            return inetAddress.getHostAddress().toString();

                        }

                    }

            }

        } catch (SocketException e){

            System.out.println(e.toString());

        }

        return null;
    }
}

MyClient 连接

public class ServerConnection extends AsyncTask<SocketAddress, String, String> {

    @Override
    protected String doInBackground(SocketAddress... params) {

        try {

            mSocket = new Socket("127.0.0.1", 4444);//test ip
                            //192.168.1.104:4444 - real ip of the server returns the same

            PrintWriter printwriter = new PrintWriter(mSocket.getOutputStream(), true);
            printwriter.write("this is test"); // write the message to output stream

            printwriter.flush();
            printwriter.close();
            mSocket.close();

            Log.i(LOG_TAG, "Socket connecting to " + params[0].toString());

            return null;
        } catch (IOException e) {

            e.printStackTrace();
            Log.i(LOG_TAG, "===================ERROR====================" +
                    "\n" +
                    e.toString());

            return e.toString();

        }
    }
}

list

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.stas.clientserverconnection" >

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

mSocket = new Socket("127.0.0.1", 4444) 行出现异常

我做错了什么?

最佳答案

权限正常,但问题由 @JonasCz 指示

mSocket = new Socket("127.0.0.1", 4444)

您无权从您的设备访问 127.0.0.1!

关于java - Android Socket 连接(权限被拒绝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30383775/

相关文章:

java - 我无法打印转换后的字符串的值

java - Esper 数据库适配器将数据插入 mysql 数据库?

c - 如何清除linux中的socket缓冲区

android - 如何在没有事先可怕的 READ_LOGS 权限的情况下收集 native 堆栈跟踪?

android - 在 android 中监听 XMPP 数据包

java - 在 java 类和 android Activity 之间流式传输时音频不清晰

Perl IO::Socket 连续读/写

spring - 如何在 Java API 中使用 Analyzer 和两个参数执行 Elasticsearch 词查询

java - Spring MVC中如何限制用户登录前访问特定页面?

android - 在 LinearLayout 中添加多个 TextView 会导致 stackOverflowError