2013-12-18 5 views
0

안녕하세요. Java 응용 프로그램에서 작업 중이며 Jboss, Windows 8 서버에 배포되었습니다. 내 서버 코드에서 내 제품과 통신하는 데 HttpUrlconnection을 사용합니다.연결이 거부되어 Java HttpUrlConnection 연결 시간 초과가 작동하지 않습니다.

내 제품에 연결할 때 evey 연결에 시간 제한을 설정하고 싶습니다. 그래서 나는 HttpUrlconnection.setconnectionTimeout(30000)을 30 초 제한 시간 동안 사용합니다. 그러나 연결은 9 분에 거절되었습니다. HttpUrlconnection.setconnectionTimeout()이 현재 작동하지 않습니다.

TCP Timeout에 의해 발생한 문제를 발견했으며 Windows 8 서버에서 재전송 제한이 설정되었습니다. 기본적으로 TCP 재전송 제한은 2입니다. 2 회 시도한 후 연결이 취소되거나 거부됩니다.

제 질문은 Windows 레지스트리 파일을 변경하지 않고 Java 측에서이 문제를 피하는 방법입니다. 그것은 settimeout에 어떤 가능성도 가지고 있거나 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) 
+0

'connection.setConnectTimeout (30000' 및'connection.setReadTimeout (30000;) 오류가 있습니까? – ChiefTwoPencils

답변

0

아래에는 프로그램이 연결의 다른 끝이 없다는 것을 의미합니다 귀하의 연결을 청취/기대합니다. 나중에 제품이 열리면 수동으로 연결을 다시 시도해야합니다. 프로그램이 시작될 때 연결되도록 '연결'을 시도하는 대기 시간이 없습니다.

솔직히 말하면, 연결 논리가 엉뚱한 것 같습니다 : 장기 실행 프로그램 (서버)에서 단기 실행 프로그램 (클라이언트)으로 연결하려는 것 같습니다. 이를 반대로하고 서버가 회의를 청취하도록하고 클라이언트가 시작될 때 서버에 연결해야합니다.

0

연결 시간 초과는 응답이 전혀없는 경우입니다. 연결 거부는 응답이므로 시간 초과가 적용되지 않습니다.

+0

안녕하세요. 요점이 있습니다. 방화벽이나 다른 이유로 인해 내 기기를 연결할 수 없습니다. 그 시간에 내가 http 요청을 호출하면 java.net.PlainSocketImpl.socketConnect (네이티브 메소드)를 호출 할 때 TCP를 통해 SYN 패킷을 장치로 보냅니다. 장치에서 응답을 얻으려고 시도합니다 .TcpMaxDataRetransmissions가 등록 된 Windows가 2이기 때문에 두 번만 시도합니다. 두 번 실패하면 요청을 포기합니다. 예외가 발생합니다. 재 시도를 확장하거나 Java로 TCP 시간 초과를 연장 할 수 있습니까? – Murali

+0

그 머리 나 꼬리를 만들 수 없습니다. 반복 만 할 수 있습니다. 시간 초과가 경과하기 전에 종류가 없으면 SYN/ACK 및 RST가 포함됩니다. – EJP