1
Tomcatサーバーは米国内で動作します。私はJavaのHTTPURLConnectionを使って中国からサーバーに接続しています。クライアントサイドで使用されているコードスニペットと、以下のTomcatサーバー側のhttpsコネクタ設定をご覧ください。Zipファイルをアップロードできない場合があります。
<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector acceptCount="100" clientAuth="false" connectionTimeout="-1" debug="4" disableUploadTimeout="true" enableLookups="false" keystoreFile="conf/server.keystore" keystorePass="passw47d" maxSpareThreads="75" maxThreads="150" minSpareThreads="25" port="443" scheme="https" secure="true" sslProtocol="TLS" useBodyEncodingForURI="true"/>
URL url=new URL(urlString);
HttpsURLConnection connection=null;
try
{
connection=(HttpsURLConnection)url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/zip");
connection.setRequestProperty("Transfer-Encoding", "chunked");
connection.setChunkedStreamingMode(4096);
connection.connect();
sout=new BufferedOutputStream(connection.getOutputStream());
break;
}
catch(FileNotFoundException exc)
{
throw exc;
}
bis=new FileInputStream(zipfile);
int i;
byte bytes[]=new byte[4096];
while((i=bis.read(bytes))!=-1)
{
sout.write(bytes,0,i);
sout.flush();
}
sout.close();
bis.close();
クライアントはほとんどの場合、正常にzipファイルをアップロードします。場合によっては、クライアントプログラムは以下の例外をスローします。
java.io.IOException: Error writing request body to server
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.checkError(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.write(Unknown Source)
at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
at java.io.BufferedOutputStream.flush(Unknown Source)
at SendFiles.sendNowThruHttp(SendFiles.java:449)
at SendFiles.run(SendFiles.java:180)
何が問題なのですか?
+1 Apache HttpClientの場合。これにはエラー処理ロジックが組み込まれており、ほとんどの基本エラーの要求を単に再試行し、独自のロジックを指定することもできます。 –
Tomcat側でdisableUploadTimeout = "true"プロパティを設定しました。だから私はタイムアウトになるとは思わない。 – Jay
@ Jay:クライアント/サーバーからの応答がない場合、2分後にTCP接続がタイムアウトします。この値は変更できません。コンピュータのTCP/IPスタックにあります。 –