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 HttpUrlConnection连接超时不起作用_Java_Sockets_Tcp_Httpurlconnection_Httpconnection - Fatal编程技术网

由于连接被拒绝,Java HttpUrlConnection连接超时不起作用

由于连接被拒绝,Java HttpUrlConnection连接超时不起作用,java,sockets,tcp,httpurlconnection,httpconnection,Java,Sockets,Tcp,Httpurlconnection,Httpconnection,您好,我正在开发Java应用程序,并部署在Jboss、Windows8服务器上。在我的服务器代码中,我使用HttpUrlconnection与我的产品进行通信 我想为evey connection设置一个与我的产品连接的时间限制。因此,我使用HttpUrlconnection.setconnectionTimeout30000的时间限制为30秒。但连接在9分钟时被拒绝。HttpUrlconnection.setconnectionTimeout此时不工作 我发现问题是由于TCP超时和window

您好,我正在开发Java应用程序,并部署在Jboss、Windows8服务器上。在我的服务器代码中,我使用HttpUrlconnection与我的产品进行通信

我想为evey connection设置一个与我的产品连接的时间限制。因此,我使用HttpUrlconnection.setconnectionTimeout30000的时间限制为30秒。但连接在9分钟时被拒绝。HttpUrlconnection.setconnectionTimeout此时不工作

我发现问题是由于TCP超时和windows 8服务器中设置的重传限制引起的。默认情况下,TCP重传限制为2。尝试2次后,连接将被放弃或拒绝

我的问题是,如何在不更改Windows注册表文件的情况下从java方面避免这个问题?这意味着可以设置超时或重试TCP SYN/RST/ACK机制,以避免连接被拒绝的问题

有谁知道,请帮我解决这个问题

url = new URL(requestURL);
HttpURLConnection connection = (HttpURLConnection)  
url.openConnection();
connection.setRequestMethod("GET");
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setConnectTimeout(30000
connection.setReadTimeout(30000;

try {
    // Get Response
    inputStream = connection.getInputStream();
} catch (IOException e) {
    //              
}
例外情况如下

java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.<init>(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)

该连接被拒绝意味着在连接的另一端没有侦听/期望您的连接的程序。如果您的产品稍后将打开,则需要手动重试连接;无需等待进行连接尝试“逗留”,以便在程序启动时连接


老实说,看起来您的连接逻辑是反向的:看起来您正试图从长时间运行的程序服务器连接到短时间运行的程序服务器客户端;反过来,让服务器侦听连接,客户端应在启动时连接到服务器。

连接超时适用于根本没有响应的情况。连接拒绝是一种响应,因此超时不适用。

是connection.setConnectTimeout30000和connection.setReadTimeout30000;这里只有错误吗?嗨。我明白你的意思。但由于防火墙或其他原因,我无法连接我的设备。在那个时,当我调用http请求时,它在调用java.net.PlainSocketImpl.socketConnectNative方法时通过TCP向设备发送SYN数据包。它试图从设备获得确认。它只试了两次。因为windows注册的TcpMaxDataRetransmissions为2。两次失败后,它放弃了请求。因此发生了异常。有可能通过java来延长重试时间或延长TCP超时时间吗?我对此一无所知。我只能重复一遍。如果在超时过去之前有任何类型的响应,则不会应用超时。这包括SYN/ACK和RST。