【发布时间】:2012-01-16 18:37:13
【问题描述】:
这基本上是图片: 我有一个服务器和一个客户端(通过本地主机操作)。服务器为每个连接创建一个客户端线程。这个新线程在读取等待来自客户端的消息时阻塞。随意,我可以通过 GUI 停用服务器,它(从主线程)向客户端发送“断开连接”,然后关闭输出流,以唤醒阻塞的客户端线程,然后通过关闭套接字来完成(我相信关闭输出流后这种关闭是不必要的,但无论如何)。
客户端: 连接请求后,休眠 10 秒,写入断开连接消息并逐字符读取应答。
问题:
在 10 秒客户端休眠时间内停用服务器后,客户端从服务器正确读取“断开连接”消息。但是,如果我只是为每个字符读取(在 while 循环内)添加一个虚拟打印,最终读取的结果会有所不同。 有时它会正确读取服务器的“断开连接”,有时它会读取“迪斯科”或类似的变体,并抛出此异常:
“Java 异常:“软件导致连接中止:recv 失败”
关于为什么添加一些打印会产生此结果的任何建议?我会假设在另一端有一个封闭的套接字不会影响阅读消息。 我发现的有关 recv 错误的其他线程提到了超时,我猜在使用 localhost 时不应该真的发生这种情况?
【问题讨论】:
-
如果其他答案中提到的“超时”是指写入超时,那么确实可以认为它是重复的
标签: java sockets exception recv