为什么AsynchronousSocketChannel在断开连接时触发其“已完成”功能?

时间:2013-08-18 11:26:13

标签: java

当Telnet客户端断开连接时,AsynchronousSocketChannel将触发其CompletionHandler的{​​{1}}功能。

completed(Integer result, ByteBuffer attachment)整数是一个完全随机的数字。

我无法区分接收新消息和客户端disconection。我怎么解决这个问题? 如何过滤此事件,以便我可以区分实际消息和垃圾随机执行?

以下是完整代码:

result

1 个答案:

答案 0 :(得分:1)

根据the documentation,结果不是随机的,它将是成功读取的字节数(可能是在套接字断开之前):

  

传递给完成处理程序的结果是读取的字节数,如果由于通道已到达流末尾而无法读取字节,则返回-1。

我认为客户必须向您发送您不期望的数据,而且价值实际上是正确的。