ここに問題があります。1.7 以降で完全に動作するコードがいくつかありますが、1.6 に切り替えると、常に次のエラーが発生します。
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
問題は HttpsURLConnection にあると思いますが、何がわかりません。HttpsURLConnectionを初期化する方法は次のとおりです。
// create URL Object from String
URL url = new URL(https_url);
// set IP Adress for X509TrustManager
caTrustManager.setHostIP(url.getHost());
TrustManager[] trustCerts = new TrustManager[]{
caTrustManager
};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustCerts, new java.security.SecureRandom());
//'ArrayList' where the data is saved from the URL
ArrayList data = null;
// open URL
HttpsURLConnection httpsVerbindung = (HttpsURLConnection) url.openConnection();
httpsVerbindung.setSSLSocketFactory(sc.getSocketFactory());
// Read the data from the URL
data = PerformAction.getContent(httpsVerbindung);
そして、エラーが発生するメソッドは次のとおりです。
Class = PerformAction
Methode = getContent(HttpsURLConnection con) :
public static ArrayList getContent(HttpsURLConnection con) {
// The ArrayList where the information is saved
ArrayList infoFromTheSite = new ArrayList();
// check if connection not null
if (con != null) {
BufferedReader br = null;
try {
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// !!!! **Error happens Here** !!!!
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
br = new BufferedReader(new InputStreamReader(con.getInputStream()));
String input;
// go through all the Data
while ((input = br.readLine()) != null) {
// save to ArrayList
infoFromTheSite.add(input);
}
} catch (IOException ex) {
Logging.StringTimeFail("Fehler mit dem BufferedReaders");
ex.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException ex) {
Logger.getLogger(PerformAction.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}
私の問題が少し明確で、誰かが私を理解してくれることを願っています:P
私の問題を解決するために時間を割いてくれてありがとう!
編集
だから私は Wireshark で、失敗したパケットが成功したものよりも小さいことを発見しました (157 バイト = 失敗; 208 バイト = true)
彼は IP パケットのデータを暗号化していないか、証明書を送信していないのではないかと考えていました。
また、SSL ハンドシェイクが成功していることにも気付きましたが、クライアントがデータを要求すると失敗し、サーバー アンサーは次のようになります。
Connection Reset
(はい、サーバーは「接続リセット」を呼び出しています)
私はここで本当に迷っています:D