gpt4 book ai didi

java - 检查客户端是否关闭连接时 reset() 出错

转载 作者:可可西里 更新时间:2023-11-01 02:40:33 24 4
gpt4 key购买 nike

我正在编写一个简单的 tcp 流 SMTP 服务器。我编写了以下代码来检查客户端连接是否仍然可用。只需查看一个字节即可查看套接字输入流是否正常工作。但是当我将in.mark(x)预读限制设置为1时,当我第二次尝试发送Header时它显示错误。当它设置为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上.

最佳答案

算了。只需读取和写入,并在出现异常时进行处理。

目前你从事算命。即使您找到了一种方法可以告诉您客户端连接现在是否处于 Activity 状态,它也可能会在调用此方法和紧接着的下一行代码之间中断。

尝试检测资源是否可用的唯一有效方法是尝试以正常方式使用它。

关于java - 检查客户端是否关闭连接时 reset() 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44351557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com