我的服务器使用AsynchronousServerSocketChannel
使用CompletionHandler
侦听客户端连接。接受客户端连接后,将再次使用AsynchronousSocketChannel
读取CompletionHandler
以接收没有超时的数据。
到目前为止,我的客户端已连接,写入服务器读取的数据,该数据能够通过同一套接字将数据发送回客户端。
当我的客户端终止时,它会调用AsynchronousSocketChannel.close()
来关闭套接字。进行此调用时,服务器正在等待从套接字读取数据。
我原本希望客户端上的AsynchronousSocketChannel.close()
调用转换为服务器上读取长度为CompletionHandler.completed
的{{1}},表明套接字已关闭,但是回调是-1
,但有以下异常:
CompletionHandler.failed
客户端应如何关闭套接字,以免在服务器上将其视为错误?
答案 0 :(得分:1)
documentation on close表示它会导致 另一方面是AsynchronousCloseException或ClosedChannelException。
要导致completed(-1)
,客户应拨打shutdownInput。
但是,我会将AsynchronousCloseException和ClosedChannelException视为正常关闭,以及complete(-1)。