微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决错误 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 举报,一经查实,本站将立刻删除。