gpt4 book ai didi

java - 如果 Tomcat 服务器说 "Client Aborted",而客户端说 "Premature EOF",谁是对的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:44 26 4
gpt4 key购买 nike

我有一个 Tomcat 服务器通过 http 将数据流式传输到 Java 客户端。它将字节从文件复制到 servlet 中的 HTTPServletResponse 输出流。

客户端使用 HttpURLConnection 连接并读取数据。

有时一切正常,有时客户端和服务器都会抛出异常。
客户说有一个“过早的 EOF”。
服务器声明“ClientAbortException”。

是不是只有上述一种可能?

客户:

java.io.IOException: Premature EOF
at sun.net.www.http.ChunkedInputStream.fastRead(ChunkedInputStream.java:234)
at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:662)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2669)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2664)java.io.IOException: Premature EOF
at sun.net.www.http.ChunkedInputStream.fastRead(ChunkedInputStream.java:234)
at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:662)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2669)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2664)

服务器:

ClientAbortException:  java.io.IOException
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
...
Caused by: java.io.IOException
at org.apache.coyote.ajp.AjpAprProcessor.flush(AjpAprProcessor.java:1223)
at org.apache.coyote.ajp.AjpAprProcessor$SocketOutputBuffer.doWrite(AjpAprProcessor.java:1310)
at org.apache.coyote.Response.doWrite(Response.java:560)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)
... 23 more

最佳答案

它们并不相互排斥。

如果套接字意外关闭,这种情况就会发生。例如,考虑一下如果您的防火墙刚刚终止套接字会发生什么。从服务器的角度来看,当它尝试写入数据时,套接字将显示为已关闭,并且将触发 ClientAbortException。从客户端的角度来看,下一次读取字节将失败,导致过早结束异常。

关于java - 如果 Tomcat 服务器说 "Client Aborted",而客户端说 "Premature EOF",谁是对的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4629704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com