错误 Android 11 -> java.net.SocketTimeoutException 来自带有 API 30 的三星物理模拟器 (android 11)

问题描述

我有两个物理模拟器

  1. 支持 API 30 的三星手机(安卓 11)
  2. 支持 API 25 的三星平板电脑(安卓 7.1)

每当我尝试使用带有 API 25 (android 7.1) 的三星平板电脑运行连接到插座的应用程序时,我都会完美地连接插座,但如果我使用带有 API 30 (android 11) 的三星手机运行它,我总是在堆栈跟踪中收到以下错误

java.net.socketTimeoutException: Failed to connect to /192.168.43.1 (port 5050) from /10.144.1.42 (port 50696) after 5000ms

这是我的代码

public class MainActivity extends AppCompatActivity {
atomicreference<String> serverIP = new atomicreference<>("");
String localIP;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    setWiFiAddress(getApplication());
    ExecutorService executorService = Executors.newFixedThreadPool(1);
    executorService.execute(() -> {
        Socket socket = new Socket();
        try {
            socket.connect(new InetSocketAddress(serverIP.get(),5050),5000);
        } catch (Exception e) {
            e.printstacktrace();
        }
        System.out.println("ok");
    });
}

public Boolean setWiFiAddress(Application application) {
    ConnectivityManager connectivityManager = (ConnectivityManager) application.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        Network nw = connectivityManager.getActiveNetwork();
        if (nw == null) return false;
        NetworkCapabilities actNw = connectivityManager.getNetworkCapabilities(nw);
        if (actNw != null && actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
            final WifiManager manager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            InetAddress localIP = getIntAddress(manager.getDhcpInfo().ipAddress);
            if(localIP != null) {
                this.localIP = localIP.getHostAddress();
            }
            InetAddress address = getIntAddress(manager.getDhcpInfo().serverAddress);
            if (address != null) {
                serverIP.set(address.getHostAddress());
                return true;
            }
        }
    }
    serverIP.set("");
    return false;
}

private InetAddress getIntAddress(int hostAddress) {
    // Get IP Address
    byte[] addressBytes = {(byte) (0xff & hostAddress),(byte) (0xff & (hostAddress >> 8)),(byte) (0xff & (hostAddress >> 16)),(byte) (0xff & (hostAddress >> 24))};

    try {
        return InetAddress.getByAddress(addressBytes);
    } catch (UnkNownHostException e) {
        return null;
    }
}

}

我在网上搜索了很多建议是在 android:usesCleartextTraffic="true" AndroidManifest.xml 中添加 <application ....> </application> 但这并没有解决问题。

我还确保我拥有应用所需的所有权限列表:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.hardware.location.gps" />
<uses-permission android:name="android.hardware.location.network" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我想知道为什么我会收到这部分错误from /10.144.1.42 (port 50696),因为网络子网是:192.168.43.x,而服务器套接字位于 192.168.43.1(它也是 wifi 服务器)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)