错误在重置()时检查客户端是否关闭连接
问题描述:
我正在写一个简单的tcp流SMTP服务器。我编写了以下代码来检查客户端连接是否仍然可用。只需查看一个字节即可查看套接字输入流是否正常工作。但是,当我将in.mark(x)
预读限制设置为1时,它会在我第二次尝试发送标题时显示错误。当它设置为2时,它似乎没有任何问题。为什么是这样?错误在重置()时检查客户端是否关闭连接
// check if client disconnected
try {
in.mark(1); // 1 char read ahead limit
if (in.read() == -1) {
System.out.println("CONNECTION CLOSED BY CLIENT!");
return; // end of thread
} else {
in.reset();
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
我得到的错误是这样的:
java.io.IOException: Mark invalid
at java.io.BufferedReader.reset(BufferedReader.java:512)
at smtp.server.SocketThread.run(SocketThread.java:59)
整个代码是my github。
答
忘记它。只要阅读和写作,并处理例外,因为它们出现。
目前你从事算命。即使你找到一种方法来告诉你客户端连接是否已经存在,它可能会在调用这个方法和下一行代码之间停下来。
尝试检测资源是否可用的唯一方法是尝试以正常方式使用它。
忘掉它吧。只要阅读和写作,并处理例外,因为它们出现。目前你从事算命。即使你找到一种方法来告诉你客户端连接是否已经存在,它可能会在调用这个方法和下一行代码之间停下来。尝试检测资源是否可用的唯一方法是尝试以正常方式使用它。 – EJP
@EJP我喜欢你的说法,算命。其实我会接受你的答案,如果它是一个。非常感谢您的洞察力。 – viz
确定这里是作为一个答案。 – EJP