我们java.net.SocketException: Connection reset在日志中看到频繁但间歇性的 错误.我们不确定Connection reset错误实际来自何处,以及如何进行调试.
该问题似乎与我们尝试发送的邮件无关.请注意,消息不是 connection reset by peer.
有关此异常的典型原因可能是什么的建议,以及我们如何进行?
这是一个代表性的堆栈跟踪(com.companyname.mtix.sms是我们的组件):
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:235)
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:77)
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105)
at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1115)
at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1832)
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1590)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:995)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:397)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
at com.companyname.mtix.sms.services.impl.message.SendTextMessage.sendTextMessage(SendTextMessage.java:127)
at com.companyname.mtix.sms.services.MessageServiceImpl.sendTextMessage(MessageServiceImpl.java:125)
at com.companyname.mtix.sms.services.remote.MessageServiceRemoteImpl.sendTextMessage(MessageServiceRemoteImpl.java:43)
at sun.reflect.GeneratedMethodAccessor203.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699) … 我试图在我的使用JBoss 6.4和Java 1.7的Web应用程序中启用TLS 1.2.我-Dhttp.protocols = TLSv1.2在我的应用程序环境中,但它似乎不适合我.
我有什么办法可以启用TLS 1.2吗?
我写了一个简单的程序
context = SSLContext.getInstance("TLSv1.2");
context.init(null,null,null);
SSLContext.setDefault(context);
SSLSocketFactory factory = (SSLSocketFactory)context.getSocketFactory();
SSLSocket socket = (SSLSocket)factory.createSocket();
protocols = socket.getEnabledProtocols();
Run Code Online (Sandbox Code Playgroud)
在应用程序中运行此程序后,TLS 1.2启用.我不想运行此程序,但我想在应用程序启动期间直接启用它.有什么办法吗?
从数据库列中检索文件对象时,我经常收到以下错误.我该如何解决这个问题?
May 8, 2009 3:18:14 PM org.apache.catalina.core.StandardHostValve status
WARNING: Exception Processing ErrorPage[errorCode=404, location=/error.jsp]
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:327)
at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:293)
at org.apache.catalina.connector.Response.flushBuffer(Response.java:537)
at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:286)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
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(Unknown Source)
Caused by: java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:746)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:433)
at org.apache.coyote.http11.InternalOutputBuffer.flush(InternalOutputBuffer.java:304)
at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:991)
at org.apache.coyote.Response.action(Response.java:182) …Run Code Online (Sandbox Code Playgroud) java.net.SocketException: Connection reset和之间有什么区别java.net.SocketException: Broken Pipe?
我想弄清楚这两个例外的原因是什么.我们的服务器上出现以下错误,基本上是基于SOAP的Web服务.当我尝试中止客户端调用我看到的异常是Broken pipe ...
以下是我们的堆栈跟踪,任何帮助表示赞赏!
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 …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序的登录页面上运行负载测试为100个用户中的100个用户正在传递休息80个用户即时获取以下异常,请帮我修复
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)
at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:281)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:92)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:61)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:715)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:520)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:505)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:328)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1141)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1130)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:431)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:258)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud) 我正在开发一个服务器,通过TCP/IP托管第三方设备,并且遇到突然的连接丢失(设备通过蜂窝连接).我需要找到一种方法来检测断开连接,而无需将数据写入设备本身.
我已经看过使用TCP keepalive功能,但Java似乎不允许任何调整keepalive操作的时间.
这样做有什么建议的方法吗?
我的简化套接字代码如下:
public class Test2Socket {
public static void main(String[] args) {
try {
ServerSocket skt = new ServerSocket(1111);
Socket clientSocket = skt.accept();
clientSocket.setKeepAlive(true);
System.out.println("Connected..");
BufferedReader input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while((inputLine = input.readLine()) != null)
{
System.out.println(inputLine);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何反馈将不胜感激.
我正在创建一个(表现良好的)网络蜘蛛,我注意到一些服务器导致Apache HttpClient给我一个SocketException - 具体来说:
java.net.SocketException: Connection reset
Run Code Online (Sandbox Code Playgroud)
导致这种情况的代码是:
// Execute the request
HttpResponse response;
try {
response = httpclient.execute(httpget); //httpclient is of type HttpClient
} catch (NullPointerException e) {
return;//deep down in apache http sometimes throws a null pointer...
}
Run Code Online (Sandbox Code Playgroud)
对于大多数服务器来说,它很好.但对于其他人来说,它会立即抛出SocketException.
导致立即发生SocketException的站点示例:http://www.bhphotovideo.com/
效果很好(和大多数网站一样):http://www.google.com/
现在,正如您所看到的,www.bhphotovideo.com在Web浏览器中加载正常.当我不使用Apache的HTTP客户端时,它也可以正常加载.(像这样的代码:)
HttpURLConnection c = (HttpURLConnection)url.openConnection();
BufferedInputStream in = new BufferedInputStream(c.getInputStream());
Reader r = new InputStreamReader(in);
int i;
while ((i = r.read()) != -1) {
source.append((char) i);
}
Run Code Online (Sandbox Code Playgroud)
那么,为什么我不只是使用这个代码呢?那么我需要使用Apache的HTTP客户端中的一些关键功能.
有谁知道是什么原因导致某些服务器导致此异常?
迄今为止的研究:
我的本地Mac dev计算机和AWS …
所以这是一个初学者的问题.
从使用urls章节执行示例代码时,它会抛出:
线程"main" java.net.SocketException中的异常:java.net.SocketInputStream.read中的连接重置 (SocketInputStream.java:189)...
Origin是openStream()方法.
这是代码:
import java.net.*;
import java.io.*;
public class URLReader {
public static void main(String[] args) throws Exception {
URL oracle = new URL("http://www.oracle.com/");
BufferedReader in = new BufferedReader(
new InputStreamReader(oracle.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
in.close();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道有关于该主题的类似线程,但我找不到适合我的答案.
到目前为止我尝试过的:
无论我尝试什么,我总是得到同样的错误:30秒左右不会发生任何事情然后它抛出提到的SocketException.
我根本不知道如何继续解决这个问题.有用的是获取有关连接重置前30秒内背景中发生的情况的信息.
那么究竟是什么导致了这种异常呢?
最小的提示可以帮助你!谢谢!
我有一个Java实现,各种客户端应用程序使用它来连接到第三方系统。这些第三方系统通过http / https支持不同的协议。在这种情况下,所有客户端应用程序都托管在Java实现所在的同一服务器上。因此,在这种情况下,各种客户端应用程序会为系统属性设置各种https协议(例如:System.setProperty("https.protocols", "SSLv3"),System.setProperty("https.protocols", "TLS")当它们使用此协议连接到那些第三方系统时)。
在这里,系统属性在该环境中的所有应用程序之间共享。因此,修改System属性会导致许多问题。所以,我想知道
blogs.oracle.com中提到的每个JDK版本都支持的协议和算法:

代码:
String responseStr = null;
System.setProperty("https.protocols",http-protocol); // This is set by the client applications. Previously, there was one by one (eg : "SSLv3". Then I changed it to "TLSv1.2,TLSv1.1,TLSv1,SSLv3" assuming it will enable all)
byteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byteArrayOutputStream.write(requestStr.getBytes());
URL mUrl = new URL(proxy_url);
HttpURLConnection con = (HttpURLConnection) mUrl.openConnection(); // It works fine for the HttpURLConnection when there's no (s)
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setUseCaches(false);
con.setDoInput(true);
con.setRequestProperty("user-agent","Mozilla(MSIE)"); …Run Code Online (Sandbox Code Playgroud) 善良的 Attn 版主:在将此查询标记为重复之前,请注意我已检查 - Link1、Link2、Link3并且无法解决该问题。我也相信上下文和错误与那些不同,因此在这里寻求帮助。
上下文:从 NSEIndia 网站下载 csv 文件到本地文件夹(注意:可以从其他随机网站下载 CSV 文件)。
问题:返回错误 - javax.net.ssl.SSLException:连接重置(完整错误粘贴在下面)
观察:我很困惑,因为我昨天遇到了同样的问题,但经过几次重试后,它奏效了。我没有更改代码或设置。
问题:有什么我可以做的,以确保在这个特定网站上看不到这个错误?
代码:
// Using FileUtils from -> import org.apache.commons.io.FileUtils;
try {
FileUtils.copyURLToFile(new URL("https://www.nseindia.com/content/fo/fo_mktlots.csv"),new File("D:\\Download\\t1.csv"));
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
错误:
javax.net.ssl.SSLException: Connection reset
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:127)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:324)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:267)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:262)
at java.base/sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1652)
at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1038)
at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:245)
at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:285)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:344)
at java.base/sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:746)
at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:689)
at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:717)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1610) …Run Code Online (Sandbox Code Playgroud) 我们的一位客户在调用我们的 Web 服务时遇到了这个错误。
我想这是因为他这边的连接问题,但我需要知道确切的原因。
堆栈跟踪:
Error while calling 10108831-402TV04LF from Thread 1 occurred after 511441
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.net.SocketException: Connection reset
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at org.apache.axis.transport.http.HTTPSender.readHeadersFromSocket(HTTPSender.java:583)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:143)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at ABCWebService.ABCSearchWebserviceSoapHttpStub.getABCWebServiceData(ABCSearchWebserviceSoapHttpStub.java:206)
at ABCWebService.ABCSearchWebserviceProxy.getABCWebServiceData(ABCSearchWebserviceProxy.java:50)
at main.VericalWsThread.run(VericalWsThread.java:66)
{http://xml.apache.org/axis/}hostname:WIN-IUMHLP6L0NU
java.net.SocketException: Connection reset
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:154)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) …Run Code Online (Sandbox Code Playgroud) 我们的服务器上有2个应用程序.一个是Java应用程序,用普通英语编写的句子中提取重要的信息块.它应该只与我们服务器上的其他应用程序通信(尽管我们还没有设置防火墙来保护它).它不应该与公众交谈(尽管目前可能).它有一些非常简单的Java代码,它在端口8080上打开一个Socket然后监听.它希望收到一个可以转换为JSON的字符串.它发回一个可以转换为JSON的字符串.它不会发回任何HTTP头,它只是你能想象到的最简单的Socket代码,甚至不是30行代码.
我们有另一个用Clojure编写的应用程序,它通过RESTful API与广阔的世界交流.
基本思想是请求从外部世界进入我们的服务器,并与Clojure应用程序进行交互.Clojure应用程序假设与Java应用程序交互,然后Clojure应用程序向任何查询它的人发回响应.
我无法弄清楚如何从Clojure应用程序调用Java应用程序.我试图使用像clj-http这样的库,但它依赖于Apache HttpClient,它假设响应将包含正确的HTTP头.Apache HttpClient在与Java应用程序交互时抛出了异常,因为Java应用程序只发回一个字符串(没有HTTP头).我不想在Java应用程序中编写完整的HTTP代码,因为这与我们在Clojure应用程序中所做的工作相关.
所以,我改变了战术,并从Clojure方面编写了一些原始的Socket代码.该代码如下所示:
(def conn (ref {:in nil :out nil}))
(defn connect []
(let [socket (Socket. "localhost" 8080)
in (BufferedReader. (InputStreamReader. (.getInputStream socket)))
out (PrintWriter. (.getOutputStream socket))]
(dosync
(alter conn
(fn [old-value] (assoc old-value :in in)))
(alter conn
(fn [old-value] (assoc old-value :out out))))))
Run Code Online (Sandbox Code Playgroud)
写函数是基本的:
(defn write-message [msg]
(doto (:out @conn)
(.println (str msg "\r"))
(.flush)))
Run Code Online (Sandbox Code Playgroud)
这工作一次,但大部分时间我尝试它(从浏览器,它使用Javascript ping API,然后调用Java应用程序)我得到:
Connection reset stack trace:
{:class java.net.SocketException,
:message "Connection reset",
:trace-elems ({:method "read",
:class "java.net.SocketInputStream",
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我打开了几个终端窗口.Java应用程序的终端根本没有显示任何活动,而Clojure应用程序显示上述错误.
如果我使用这个curl(它直接击中Java应用程序),那么一切正常: …
我正在尝试使用JMeter将请求发送到我在localhost上运行的应用程序,但由于java.net.SocketException,许多请求都失败了.我没有在控制台中看到任何异常.
我的代码如下:
try {
return myService.findItems(group);
} catch (NullPointerException n) {
n.printStackTrace();
} catch (HibernateException h) {
h.printStackTrace();
} catch (IOException i) {
i.printStackTrace();
}
return null;
Run Code Online (Sandbox Code Playgroud)
知识库
public LinkedHashMap findItems(String group) throws NullPointerException, HibernateException, IOException {
Session session = sessionFactory.getCurrentSession();
..... //request is sent to database
return items;
}
Run Code Online (Sandbox Code Playgroud)
我的JMeter配置的屏幕截图




java ×12
sockets ×5
jmeter ×2
ssl ×2
apache ×1
axis ×1
clojure ×1
curl ×1
exception ×1
fileutils ×1
httpclient ×1
https ×1
ip ×1
java-7 ×1
jboss ×1
performance ×1
spring-mvc ×1
sslexception ×1
tcp ×1
tls1.2 ×1
tomcat ×1
web-crawler ×1
web-services ×1