【问题标题】:How to resolve java net ConnectException Connection refused connect even server is up如何解决 java net ConnectException 连接被拒绝连接,即使服务器已启动
【发布时间】:2013-11-27 12:42:50
【问题描述】:

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

当服务器一次从多个线程向设备发送请求时,某些线程出现 java.net.ConnectException: Connection denied 的异常。但是设备会延迟向服务器发送响应。我已将 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)

【问题讨论】:

  • 你能解释一下'只有在多线程调用或发送时才会出现错误'这句话吗?
  • 嗨,keerthi。仅在多个线程同时发送请求时发生。我将编辑该行
  • 服务器有每个IP的连接限制并且拒绝。

标签: java sockets httpurlconnection


【解决方案1】:

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

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

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

【讨论】:

  • @Murali 我会调试这个问题,以便在我实施修复之前确定这是问题所在。您可以更改设备上的应用程序或将其配置为输出调试信息吗?
  • 我无法更改设备上的应用程序。我们只需要在服务器端应用程序中进行修改。这就是问题
  • @Murali 查看我的答案的编辑。我也会添加更多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2021-10-04
相关资源
最近更新 更多