2017-05-03 4 views
0

HttpUrlConnectionを使用してリモートクライアント上のサービスを呼び出す関数があります。この関数は、HttpsUrlConnectionを使用してのみ呼び出すことができる新しいセキュアなリモートクライアントを追加するまでうまく動作します。HttpsURLConnectionにアクセスした後にHttpURLConnectionに接続するとSocketExceptionが発生する

新しいクライアントを呼び出すと、新しいhttpsリモートクライアントを呼び出すと、古いクライアントはInputStreamオブジェクトを取得しようとするとjava.net.SocketException: Connection resetを返します。

このような私のコードを見て何か:

conn = (HttpURLConnection) url.openConnection(); 
conn.setRequestProperty("Content-Type", "application/json"); 
conn.setDoOutput(true); 
conn.setRequestMethod("POST"); 
out = conn.getOutputStream(); 
writer = new OutputStreamWriter(out); 
writer.write(strJson); 
writer.close(); 
in = conn.getInputStream(); // connection reset error here. 
reader = new InputStreamReader(in); 
rd = new BufferedReader(reader); 
while ((line = rd.readLine()) != null) { 
    result += line; 
} 
rd.close(); 
in.close(); 
reader.close(); 
out.close(); 
conn.disconnect(); 

誰もが何が起こったかの手掛かりを持っていますか? ありがとうございます。

スタックトレースはそうのようなものです:私はまだエラーが発生する原因がわからない

java.net.SocketException: Connection reset 
    at java.net.SocketInputStream.read(SocketInputStream.java:196) 
    at java.net.SocketInputStream.read(SocketInputStream.java:122) 
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:442) 
    at sun.security.ssl.InputRecord.read(InputRecord.java:480) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:934) 
    at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:891) 
    at sun.security.ssl.AppInputStream.read(AppInputStream.java:102) 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) 
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:275) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334) 
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:690) 
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633) 
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:661) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1324) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 
+0

スタックトレースしてください。 – EJP

+0

通常、Https URLに接続するには、アプリケーションにセキュリティ証明書を追加する必要があります。 –

+0

"in = conn.getInputStream()"という行の前に、conn.setDoInput(true)を追加して、アプリケーションが接続からの入力を読み込もうとしていることを示すことができますか? – OTM

答えて

0

。私の解決策は、java.net.HttpURLConnectionを使用しないで、代わりにorg.apache.http.impl.client.DefaultHttpClientを使用することです。

関連する問題