コード内でソケット タイムアウトを設定する場所に疑問があります。私が達成しようとしているのは、ソケットが作成されたときにタイムアウトが10秒になることです。だから私は握手の前にそれを設定しています。ログに表示されるエラーは 2 種類あります。1) 接続タイムアウト エラーおよび 2) 読み取りタイムアウト エラー。そのため、タイムアウトを設定する場所について誰かが詳しく説明してくれるかどうか疑問に思っていました。次のコードがあります。
try{
SSLSocketFactory factory=(SSLSocketFactory)SSLSocketFactory.getDefault();
socket = (SSLSocket)factory.createSocket(host,port);
socket.setSoTimeout(10000);
socket.startHandshake();
OutputStream socketOut =( socket.getOutputStream() );
String command = method+" "+path+" HTTP/1.0\n";
//command+="Host: "+host+"\nConnection: close\n";
if (data!=null) {
command+="Content-Length: " + data.length +"\n\n";
sendBytes.write(command.getBytes(),0,command.length());
sendBytes.write(data,0,data.length);
} else {
// if data == null then we are most likely doing a GET request
sendBytes.write(command.getBytes(),0,command.length());
}
sendBytes.write("\n".getBytes(),0,"\n".length());
temp = sendBytes.toByteArray();
socketOut.write(temp,0,temp.length);
socketOut.flush();
/* read response */
BufferedInputStream socketIn =
new BufferedInputStream( socket.getInputStream() );
byte[] inputData = new byte[READSIZE];
while ((bytesRead=socketIn.read(inputData,0,READSIZE)) > -1) {
receiveBytes.write(inputData,0,bytesRead);
}
result=receiveBytes.toByteArray();
//receiveBytes.close();
//sendBytes.close();
//socket.close();
} catch (Exception e) {
throw e;
}finally {
try { receiveBytes.close(); sendBytes.close(); socket.close(); } catch (Exception ee) {}
}
return result;
} // end submit
} // end class
タイムアウトを少なくとも機能させる方法を教えてください。ログでは、10 秒ではなく 18 秒でエラーが発生しています (これは当てはまりません)。
ありがとう