如何解决java net ConnectException连接拒绝连接甚至服务器已启动

时间:2013-11-27 12:42:50

标签: java sockets httpurlconnection

我正在使用Httpurlconnection将请求从我的jboss服务器发送到我的设备。设备已由cgi构建。

当服务器一次从多个线程向设备发送请求时,某个线程出现异常,如java.net.ConnectException:Connection refused。但是设备在一定的延迟时间内向服务器发送响应。我已将httpurlconnection超时设置为30秒(3000毫秒)。

但是只有在多个线程同时发送错误时才会出现错误。

有没有人知道请指导我解决问题。

java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:519)
    at java.net.Socket.connect(Socket.java:469)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
    at sun.net.www.http.HttpClient.New(HttpClient.java:306)
    at sun.net.www.http.HttpClient.New(HttpClient.java:323)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:852)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:793)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:718)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1041)

1 个答案:

答案 0 :(得分:2)

如果单个线程连接正常,每次,但某些并发运行的线程会获得此异常,那么这很可能是由于可用的连接数量有限。您可以更改设备上可用的并发连接数吗?如果没有,那么您可以尝试限制尝试建立连接的线程数。

编辑:如果您无法修改“设备”应用程序或将其配置为进行调试,请尝试查看尝试连接到它的线程的确切行为。在客户端(在这种情况下是您的jboss服务器)上使用调试器,或者从显示连接和释放时间的线程中记录调试信息,以查看当多个线程同时尝试连接时是否发生异常总是 (而不是在其他线程连接或超时之前完成连接的线程)。

如果结果证明它确实是导致问题的连接限制,您可以尝试创建在线程之间共享的单例连接对象。当多个线程尝试连接时,这将严重瓶颈jboss应用程序。如果这是不可接受的,你将不得不提出一个新的解决方案(例如,多个设备,编写自己的应用程序等)。