2009-06-16 30 views
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

おそらくネットワークタイムアウトです。しかし、確かに、サーバーのログファイルを見てください。エラーメッセージも表示されます。

私はまたHttpClient Java libraryをご覧になることをお勧めします。例については、this article(最後のほうにあります)を参照してください。

+0

+1 Apache HttpClientの場合。これにはエラー処理ロジックが組み込まれており、ほとんどの基本エラーの要求を単に再試行し、独自のロジックを指定することもできます。 –

+0

Tomcat側でdisableUploadTimeout = "true"プロパティを設定しました。だから私はタイムアウトになるとは思わない。 – Jay

+0

@ Jay:クライアント/サーバーからの応答がない場合、2分後にTCP接続がタイムアウトします。この値は変更できません。コンピュータのTCP/IPスタックにあります。 –

関連する問題