我发现 android 中的套接字流连接有一些奇怪的行为。我想知道为什么它与 Java 不同。
在我的AsyncTask
我打开一个client socket
和一个与inputstream
我的主机连接。我正在研究一种方法来检查主机是否已消失或仍然可用。所以我启动了一个线程来检查连接是否可用。bufferedreader
TCP
如果主机不在,线程将关闭我的 asynctask 中的套接字以进行可能的重新连接。那工作得很好,我很自豪,但现在是棘手的部分。
在 Java 中,我可以关闭套接字,Socket.close()
并且阻塞的 readline 方法将被异常捕获。
在 Android 中,我必须调用Socket.shutdownInput()
来打破 readline 块并捕获exception
. 因为尝试关闭inputstream
( BufferedReader
) 对这种情况没有影响。即使我关闭了套接字,readline 仍然处于活动状态并处于阻塞状态。
谁能解释一下这种行为?我知道我必须遵守关闭条件,但这种行为非常不同。
编辑:谢谢 yorkw 的链接。这是完全相同的问题,因为我的手机上运行着 Froyo。