相关疑难解决方法(0)

是什么导致我的java.net.SocketException:连接重置?

我们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) …

java sockets socketexception connection-reset

136
推荐指数
7
解决办法
81万
查看次数

如何在Java 7中启用TLS 1.2

我试图在我的使用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启用.我不想运行此程序,但我想在应用程序启动期间直接启用它.有什么办法吗?

java jboss java-7 tls1.2

33
推荐指数
6
解决办法
10万
查看次数

ClientAbortException:java.net.SocketException:由peer重置连接:套接字写入错误

从数据库列中检索文件对象时,我经常收到以下错误.我该如何解决这个问题?

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 tomcat socketexception connection-reset

17
推荐指数
2
解决办法
10万
查看次数

java.net.SocketException有什么区别:Connection reset和java.net.SocketException:Broken Pipe?

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)

java sockets

13
推荐指数
3
解决办法
7850
查看次数

我得到java.net.SocketException:使用Jmeter运行负载测试时连接重置异常

我在我的应用程序的登录页面上运行负载测试为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)

jmeter performance-testing socketexception

10
推荐指数
1
解决办法
3万
查看次数

使用TCP KeepAlive检测套接字断开

我正在开发一个服务器,通过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)

任何反馈将不胜感激.

java sockets ip multithreading tcp

9
推荐指数
1
解决办法
2万
查看次数

Apache HTTPClient抛出java.net.SocketException:许多域的连接重置

我正在创建一个(表现良好的)网络蜘蛛,我注意到一些服务器导致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 …

java sockets apache httpclient web-crawler

8
推荐指数
1
解决办法
3万
查看次数

Java教程示例代码抛出:java.net.SocketException:连接重置 - 导致它的原因是什么?

所以这是一个初学者的问题.

使用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)

我知道有关于该主题的类似线程,但我找不到适合我的答案.

到目前为止我尝试过的:

  • 我按照此处的建议设置了代理主机 .命令是:java -Dhttp.proxyHost = dslb-088-071-100-199.pools.arcor-ip.net,我也尝试插入System.setProperty("http.proxyHost","dslb-088-071- 100-199.pools.arcor-ip.net"); 在URLReader类的第一行.
  • 我试过JSoup html解析器和
  • org.apache.commons.io.FileUtils.copyURLToFile(URL,File)方法有类似的结果.

无论我尝试什么,我总是得到同样的错误:30秒左右不会发生任何事情然后它抛出提到的SocketException.

我根本不知道如何继续解决这个问题.有用的是获取有关连接重置前30秒内背景中发生的情况的信息.

那么究竟是什么导致了这种异常呢?

最小的提示可以帮助你!谢谢!

java exception

6
推荐指数
1
解决办法
1万
查看次数

设置HTTPS连接的https.protocols系统属性的问题

我有一个Java实现,各种客户端应用程序使用它来连接到第三方系统。这些第三方系统通过http / https支持不同的协议。在这种情况下,所有客户端应用程序都托管在Java实现所在的同一服务器上。因此,在这种情况下,各种客户端应用程序会为系统属性设置各种https协议(例如:System.setProperty("https.protocols", "SSLv3")System.setProperty("https.protocols", "TLS")当它们使用此协议连接到那些第三方系统时)。

在这里,系统属性在该环境中的所有应用程序之间共享。因此,修改System属性会导致许多问题。所以,我想知道

  1. 有没有办法在不使用系统属性的情况下完成此任务?
  2. 有没有办法设置所有可能的https.protocols,使其支持与第三方系统建立的任何http或https连接,从而支持各种协议?

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)

java ssl https

6
推荐指数
1
解决办法
2万
查看次数

错误:javax.net.ssl.SSLException:连接重置(仅限特定网站)

善良的 Attn 版主:在将此查询标记为重复之前,请注意我已检查 - Link1Link2Link3并且无法解决该问题。我也相信上下文和错误与那些不同,因此在这里寻求帮助。

上下文:从 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)

java ssl fileutils apache-commons-io sslexception

6
推荐指数
0
解决办法
1万
查看次数

Axis Web 服务客户端错误

我们的一位客户在调用我们的 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)

java axis web-services socketexception

5
推荐指数
1
解决办法
8989
查看次数

什么是最简单的Clojure套接字调用,类似于"curl"?(处理java.net.SocketException)

我们的服务器上有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应用程序),那么一切正常: …

java sockets curl clojure

5
推荐指数
0
解决办法
689
查看次数

为什么我收到响应代码:非HTTP响应代码:java.net.SocketException?

我正在尝试使用JMeter将请求发送到我在localhost上运行的应用程序,但由于java.net.SocketException,许多请求都失败了.我没有在控制台中看到任何异常.

我读了这些问题1问题2,但没有多大帮助.

我的代码如下:

 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 performance spring-mvc jmeter performance-testing

4
推荐指数
1
解决办法
2万
查看次数