Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.net.SocketException:Connection reset和java.net.SocketException:breaked Pipe之间有什么区别?_Java_Sockets - Fatal编程技术网

java.net.SocketException:Connection reset和java.net.SocketException:breaked Pipe之间有什么区别?

java.net.SocketException:Connection reset和java.net.SocketException:breaked Pipe之间有什么区别?,java,sockets,Java,Sockets,与java.net.SocketException:breaked Pipe之间的区别是什么 我试图找出这两个例外的原因。我们的服务器上出现以下错误,它基本上是一个基于soap的Web服务。当我尝试中止客户端调用时,我看到的异常是管道断开 下面是我们的堆栈跟踪,非常感谢您的帮助 2011-01-10 00:44:33,828 96893947 INFO [STDOUT] (http-0.0.0.0-8180-Processor25:) ERROR: '' 2011-01-10 00:44:3

java.net.SocketException:breaked Pipe
之间的区别是什么

我试图找出这两个例外的原因。我们的服务器上出现以下错误,它基本上是一个基于soap的Web服务。当我尝试中止客户端调用时,我看到的异常是管道断开

下面是我们的堆栈跟踪,非常感谢您的帮助

2011-01-10 00:44:33,828 96893947 INFO  [STDOUT] (http-0.0.0.0-8180-Processor25:) ERROR:  ''
2011-01-10 00:44:33,829 96893948 INFO  [STDOUT] (http-0.0.0.0-8180-Processor25:) Jan 10, 2011 12:44:33 AM com.sun.xml.rpc.server.http.JAXRPCS
ervletDelegate doGetDefault
SEVERE: JAXRPCSERVLET34: transformation failed : ClientAbortException:  java.net.SocketException: Connection reset
JAXRPCSERVLET34: transformation failed : ClientAbortException:  java.net.SocketException: Connection reset
        at com.sun.xml.rpc.server.http.WSDLPublisher.handle(WSDLPublisher.java:109)
        at com.sun.xml.rpc.server.http.JAXRPCServletDelegate.doGetDefault(JAXRPCServletDelegate.java:185)
        at com.sun.xml.rpc.server.http.JAXRPCServletDelegate.doGet(JAXRPCServletDelegate.java:153)
        at com.sun.xml.rpc.server.http.JAXRPCServlet.doGet(JAXRPCServlet.java:111)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
--
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)
2011-01-10 00:44:33,829 96893948 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/soa].[UserService]] (http-0.0.0.0-81
80-Processor25:) Servlet.service() for servlet UserService threw exception
javax.servlet.ServletException: JAXRPCSERVLET34: transformation failed : ClientAbortException:  java.net.SocketException: Connection reset
        at com.sun.xml.rpc.server.http.JAXRPCServletDelegate.doGetDefault(JAXRPCServletDelegate.java:347)
        at com.sun.xml.rpc.server.http.JAXRPCServletDelegate.doGet(JAXRPCServletDelegate.java:153)
        at com.sun.xml.rpc.server.http.JAXRPCServlet.doGet(JAXRPCServlet.java:111)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)

这些是TCP协议级别上的错误条件。两者基本上都意味着对方关闭了TCP连接。区别在于通信的哪个阶段。

读写时可能会发生“连接重置”“断管”只能在写入时发生。这两种情况都是由于写入另一端已关闭的连接或由于其他原因已重置的连接造成的。

当对等方关闭连接时(即,在另一端保留连接的应用程序),连接重置和管道破裂都会发生

写入(请参阅)或读取(请参阅)时,可能会发生连接重置

管道破裂
发生在
java.net.SocketException的本机方法中

java.net.SocketException: Broken pipe
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
因此,正如Michael Borgwardt所建议的那样,
管道破裂发生在较低的通信级别


在大多数情况下,我在向客户端浏览器发送大PDF时会看到此错误,并且用户在获取整个文档之前会杀死浏览器(在这种情况下,我只是忽略此错误,因为这是用户关闭浏览器的选择,没有什么可纠正的)。但这可能是其他原因(例如)。

两者似乎都指向类似的情况-远程套接字不再可用于写入

最近,在我的实验中,我发现当我的服务器在Unix环境上并且我终止了客户端时,管道会断开

015-06-26 10:53:51,028-0400 [ERROR][WS-ASync] (Handler.java:1168) Exception while writing ClientAbortException:  java.net.SocketException: Broken pipe
ClientAbortException:  java.net.SocketException: Broken pipe
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:413)
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:371)
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:438)
然而,当服务器在windows上运行时,我看到连接重置异常

2015-06-26 09:11:31,491 ERROR [WS-ASync] (Handler.java:1168) - Exception while writing ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error
ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:388)
    at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:462)
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:366)
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:413)
        at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:366)

有趣的回答,但你能详细说明一下吗?@Vandersraaf:我对细节了解得不够详细,而且也不太可能有什么不同。两者都发生在同一级别,你没有提供相反的证据。@EJP:“断管”的事实由本机方法抛出,而不是由Java代码抛出,这表明它是较低的代码级别。术语“通信级别”应理解为“代码级别”,而不是OSI堆栈的级别。我的猜测是,取决于客户端何时关闭连接,您会得到“断管”或“连接重置”。