我有一个客户端和一个服务器应用程序,其中客户端发送一个数据字节,表示用户已关闭客户端窗口并终止了客户端程序。问题是服务器可能会在丢弃该客户端之前向该客户端发送最后一个通知。如果服务器在阻塞模式下使用 SocketChannel 的 write 方法,它会无限期地阻塞还是被忽略?我应该让客户端在断开连接之前等待“断开连接确认”吗?
问问题
236 次
2 回答
1
“是”对你的最后一个问题。您应该设计并实现一个告别协议,其中包括客户端不再发送或读取任何应用程序级数据的状态,但仍在等待关闭时的最终确认。
于 2012-10-27T22:12:53.257 回答
1
它不会永远阻塞,也不会被忽略。如果套接字发送缓冲区中有空间用于数据,它很可能根本不会阻塞。如果它确实阻塞,它可能会引发 IOException: 'connection reset by peer',或者它可能只是解除阻塞并正常返回。没有人能预测到这一点。这种情况是不正确的,不应允许发生。您可以通过关闭两个套接字以进行输出然后读取直到获得 EOS 来达到商定的相互关闭点;那么双方都在同一点并且可能会关闭。
于 2012-10-28T00:36:38.850 回答