如何在TCP连接上收到[FIN,ACK]时通知Java应用程序?

时间:2015-03-12 10:04:54

标签: java apache tcp jonas

我从JMeter实例到Apache Server建立了2个连接,从Apache服务器到部署在Jonas中的Java应用程序建立了连接。

当我终止JMeter进程时,使用[RST]关闭与Apache的连接。然后Apache向Jonas发送[FIN,ACK]。 Jonas没有发送所有数据,所以它不断发送数据。 Jonas稍后用[FIN,ACK]关闭连接。 TCP RFC中描述了此行为。

所以,问题是Apache从Jonas接收所有数据,即使Apache无法将其发送给JMeter。

我的问题是:我的Java应用程序是否可以在收到来自Apache的FIN发送的FIN后触发?

2 个答案:

答案 0 :(得分:0)

不直接,最终java可能会从InputStream或OutputStream中抛出IOException,但这与平台有关。

在JDK 7发布之前,人们谈到了“原始套接字”java实现,但不知何故我认为它从未实现过。

答案 1 :(得分:0)

  

我的Java应用程序可以在收到来自Apache的FIN发送的FIN后触发吗?

是的,但你必须从连接中读取。根据您调用的读取方法,您将以各种形式获得流的结尾。见Javadoc。