Невозможно время от времени загружать файлы ZIP - PullRequest
1 голос
/ 16 июня 2009

Сервер Tomcat работает в США. Я подключаюсь к серверу из Китая, используя Java HTTPURLConnection. Ниже приведен фрагмент кода, используемый на стороне клиента, и конфигурация коннектора https на стороне сервера tomcat.

<!-- 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 Ответ

1 голос
/ 16 июня 2009

Вероятно, тайм-аут сети. Но чтобы быть уверенным, взгляните на файлы журнала сервера. Они также будут содержать сообщение об ошибке.

Я также предлагаю взглянуть на библиотеку Java HttpClient , которая делает такие вещи намного проще и надежнее. См. эту статью (ближе к концу) для примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...