【发布时间】:2014-06-05 20:21:13
【问题描述】:
我正在 Android 中编写一个 TCP 客户端,它将数据发送到 Java 服务器。我现在正在为服务器不可用时添加验证,并且当服务器突然被杀死时我陷入了困境(我实际上是使用JFrame.EXIT_ON_CLOSE 退出服务器,因为是测试服务器)。
问题是,当我关闭服务器时,无论何时我写入 OutputStream 或读取 InputStream 时,客户端都不会引发任何异常。
// This is inside a try block, catching IOException, and finally block closes all streams
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (mRun) {
String response = in.readLine();
Message message = Message.obtain();
if (response != null && message != null) {
message.obj = response;
mHandler.sendMessage(message);
}
}
另外,当我关闭服务器时,系统每秒会记录大约 10-20 个以下日志,或者更多:
dalvikvm﹕ GC_FOR_ALLOC freed 499K, 6% free 9377K/9920K, paused 13ms, total 13ms
ALSO 我有另一个线程尝试使用PrintWriter 写入Sockets 的OutputStream:
if(out != null && !out.checkError()) {
Log.d(TAG, "Writing to output stream...");
//...
而且它似乎一直在执行,这意味着 checkError() 正在返回 false
我是 Socket 编程的新手,所以解释一下我为什么要按照你告诉我的去做会很好,在此先感谢。
【问题讨论】:
-
但是你能检测到它已经关闭了吗?
标签: java android swing sockets