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)
スタックトレースしてください。 – EJP
通常、Https URLに接続するには、アプリケーションにセキュリティ証明書を追加する必要があります。 –
"in = conn.getInputStream()"という行の前に、conn.setDoInput(true)を追加して、アプリケーションが接続からの入力を読み込もうとしていることを示すことができますか? – OTM