Java套接字异常:recv失败

时间:2011-12-09 13:17:04

标签: java sockets exception recv

这基本上是图片: 我有一个服务器和一个客户端(通过localhost操作)。服务器为每个连接创建一个客户端线程。这个新线程在读取等待来自客户端的消息时阻塞。随意,我可以通过GUI停用服务器,GUI将(从主线程)“断开”发送到客户端,然后关闭输出流,唤醒被阻止的客户端线程,然后通过关闭套接字完成(我相信在关闭输出流之后这种关闭是不必要的,但无论如何)。

客户方: 在连接请求之后,它会休眠10秒,写入断开连接消息并通过char读取答案字符。

问题:

在该10秒客户端休眠时间内停用服务器后,客户端从服务器正确读取“断开连接”消息。但是,如果我只为每个char读取添加一个虚拟打印(在while循环内),则最终读取的结果会发生变化。 有时它会正确地读取服务器的“断开连接”,有时会读取“disco”或类似的变体,并抛出此异常:

“Java异常:”软件导致连接中止:recv失败“

为什么添加一些打印件的任何建议都会产生这种结果?我会假设另一端有一个封闭的套接字对读取消息没有影响。 我发现有关recv错误的其他线程提到了超时,我猜测在使用localhost时不应该发生这种情况吗?

2 个答案:

答案 0 :(得分:1)

发生错误是因为另一端已断开连接并且您的写入失败。如果你读得足够快,它还没有确定连接已经丢失。

有一些方法可以避免这种错误,但最简单的方法就是忽略它

答案 1 :(得分:-2)

最近看到这个错误是由于JBoss配置中没有代理设置(即e.empalone.xml)引起的。如有必要,可以在系统属性中添加代理 - 您可以通过使用SoapUI调用Web服务来检查是否需要它们。