【问题标题】:Cannot connect to socket with Android App无法使用 Android 应用程序连接到套接字
【发布时间】:2022-01-01 14:52:39
【问题描述】:

我花了 1 天的时间尝试从 Android 应用程序连接到 SocketIO,但不能。虽然我可以通过笔记本电脑和物理设备中的浏览器访问本地链接(使用<uses-permission android:name="android.permission.INTERNET"/>),但每次启动应用程序后我都无法通过Android App连接到Socket。 这是我在gradle 中添加的依赖项:

dependencies{
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
    testImplementation 'junit:junit:4.+'
    implementation ('io.socket:socket.io-client:2.0.0') {
        exclude group: 'org.json', module: 'json'
    }
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

这是我在MainActivity.java中的代码:


import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

import io.socket.client.IO;
import io.socket.client.Socket;

import java.net.URISyntaxException;



public class MainActivity extends AppCompatActivity {
    private Socket mSocket;
    {
        try {
            mSocket = IO.socket("http://192.168.1.2:3000/");
        } catch (URISyntaxException e) {
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mSocket.connect();
    }
}

我该怎么办?

【问题讨论】:

  • 你能给我们看看日志吗?尝试打印错误。尝试连接套接字时遇到什么错误?
  • 我也在catch 上尝试了日志错误,但它没有给我任何东西
  • android:usesCleartextTraffic="true" 在您的清单中设置为 true 吗?
  • 感谢您的回答。我修复了:>

标签: java android node.js socket.io


【解决方案1】:

您正在使用 http url 进行连接 在较新的 android 版本上,系统默认阻止 http 流量

要允许 http,请编辑您的 AndroidManifest.xml 并添加 android:usesCleartextTraffic="true" 到这样的应用程序标签

<application android:usesCleartextTraffic="true">
</application>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    相关资源
    最近更新 更多