Bim*_*imp 5 java sockets exception recv
这基本上是图片:我有一个服务器和一个客户端(通过localhost操作).服务器为每个连接创建一个客户端线程.这个新线程在读取等待来自客户端的消息时阻塞.随意,我可以通过GUI停用服务器,GUI将(从主线程)"断开"发送到客户端,然后关闭输出流,唤醒被阻止的客户端线程,然后通过关闭套接字完成(我认为在关闭输出流之后这种关闭是不必要的,但无论如何).
客户端:连接请求后,它会休眠10秒,写入断开连接消息并通过char读取答案字符.
问题:
在该10秒客户端休眠时间内停用服务器后,客户端从服务器正确读取"断开连接"消息.但是,如果我只为每个char读取添加一个虚拟打印(在while循环内),则最终读取的结果会发生变化.有时它会正确读取服务器的"断开连接",有时会读取"disco"或类似的变体,并抛出此异常:
"Java异常:"软件导致连接中止:recv失败"
有关添加少量打印件的原因有何建议可以创建此结果?我会假设另一端有一个封闭的套接字对读取消息没有影响.我发现有关recv错误的其他线程提到超时,我猜测在使用localhost时应该不会发生这种情况?
发生该错误是因为另一端已断开连接并且您的写入失败。如果您阅读得足够快,它还没有确定连接已丢失。
有多种方法可以避免此错误,但最简单的方法就是忽略它
归档时间: |
|
查看次数: |
21905 次 |
最近记录: |