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