我有一个服务器 - 客户端应用程序,我用各种各样的“登录失败代码”发现了一个奇怪的减速带。
我想要做的是发送描述登录有效性的代码,并在必要时关闭OutputStream
。
这个问题是在客户端可以读取响应之前关闭套接字,这导致看似随机和隐秘的故障。
除了使用setSoLinger()
(等)之外,还有办法检查客户端是否读取了写入的最后一个字节(或更多)?
感谢。
答案 0 :(得分:1)
在Java中,服务器应用程序知道客户端已收到某些内容的唯一方法是在协议中包含此属性:客户端必须发送某种消息,指出它已收到数据(如果需要,可能带有某种校验和),然后服务器必须等待此消息。只有这样才能确定任何事情。
没有其他可靠的方法可以确保其他端点收到一些数据:没有.close()
,没有.flush()
,没有任何东西可以保证其他端点的接收。