【发布时间】: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 是否与它有关。