【问题标题】:Android cannot connect to socket server (java)Android无法连接到套接字服务器(java)
【发布时间】:2016-03-10 16:15:55
【问题描述】:

我写了一个简单的 java 套接字服务器。 我可以使用我的 java 客户端连接到它。

但是,当我尝试将 android 设备连接到它时,它会出现以下错误:socket failed: eacces (permission denied)

代码如下:

btnConvert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String text = txtText.getText().toString();
                try {
                    Socket socket = new Socket("192.168.0.110", 7575);
                    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                    out.println(text);
                    Toast.makeText(context, in.readLine(), Toast.LENGTH_SHORT).show();
                    in.close();
                    out.close();
                    socket.close();
                }
                catch(Exception e){
                    e.printStackTrace();
                }
            }
        });

这条线:Socket socket = new Socket("192.168.0.110", 7575); 似乎是罪魁祸首。

我做了一些研究,发现了以下链接:

Error message 'java.net.SocketException: socket failed: EACCES (Permission denied)'

Android java.net.SocketException:socket failed: EACCES (Permission denied)

Android java.net.SocketException: socket failed: EACCES (Permission denied)

所以,这是我的清单文件:

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

    <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" >
        <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>

那么怎么了??

【问题讨论】:

    标签: java android sockets


    【解决方案1】:

    您不能在单击处理程序中创建 Socket,因为它在主线程中运行。

    使用线程或 AsyncTask 进行 Socket 创建、读取和写入。

    【讨论】:

    • 出于好奇,为什么不能在主线程中创建socket?
    • Google/Android 禁止在主线程上进行网络操作。
    • 因为网络速度很慢并且可能导致 UI 无响应
    【解决方案2】:

    尝试使用 10.0.2.2 而不是 192.168.0.110 作为您的 android 客户端 localhost。

    也许这不是主要问题,但您可以尝试一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-05
      • 2014-05-21
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      • 2018-11-29
      • 1970-01-01
      相关资源
      最近更新 更多