【问题标题】:Android 10 inputStream times out on readLineAndroid 10 inputStream 在 readLine 上超时
【发布时间】:2020-04-06 18:49:08
【问题描述】:

简化代码:

Socket mysock = new Socket("192.168.1.1", 1234);
mysock.setSoTimeout(15000);
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(mysock.getOutputStream())), true);
BufferedReader in = new BufferedReader(new InputStreamReader(mysock.getInputStream()));
out.println("some text here");
String response = in.readLine(); // <-- throws Read timed out exception.

在低于 10 的 Android 版本上,此代码可以正常工作。并且没有抛出异常。

在 Android 版本 10 上,readLine()总是在 15 秒后抛出异常。

我对套接字流做错了吗?

【问题讨论】:

  • 还有什么例外?消息呢?
  • mysock.setSoTimeout(15000); 15000 是什么意思?
  • 例外是“读取超时”仅此而已。 15000 是 15 秒超时(以毫秒表示)。
  • 现在您知道为什么它会在 15 秒后超时。奇怪的是你没有意识到。如果你这样做了,那么问题是什么?
  • 问题是:Android 10 中是否有一些不同的东西导致此代码超时?因为 Android 6-7-8-9 设备(不是模拟器)使用相同的源代码连接到相同的物理设备并且它们不会超时。只有 Android 10 设备会出现超时异常(当然是在 15 秒过后)。调试他们都连接到的设备将非常困难,因此首先要确定 Android 10 是否与它有关。

标签: android tcp


【解决方案1】:

原来是手机阻止了连接。

我不确定这是 Android 10,还是这样做的制造商的自定义 UI,但用户必须点击网络并允许手机完成连接。

这都是因为目标设备没有互联网...

【讨论】:

    猜你喜欢
    • 2021-09-30
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2012-05-18
    • 2011-10-24
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多