Le serveur Tomcat s'exécute aux États-Unis. Je me connecte au serveur en provenance de Chine en utilisant HTTPURLConnection de Java. Veuillez consulter l'extrait de code utilisé côté client et la configuration du connecteur https dans le serveur Tomcat ci-dessous.Impossible de télécharger des fichiers zip occasionnellement
<!-- 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();
Le client télécharge les fichiers zip avec succès la plupart du temps. Parfois, le programme client renvoie l'exception suivante.
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)
Quel pourrait être le problème?
+1 pour Apache HttpClient. Il intègre une logique de gestion des erreurs qui va simplement réessayer la requête pour la plupart des erreurs de base, et vous permet également de spécifier votre propre logique. –
J'ai défini la propriété disableUploadTimeout = "true" du côté Tomcat. Donc je ne pense pas que cela va expirer. – Jay
@Jay: La connexion TCP expirera après deux minutes s'il n'y a pas de réponse du client/serveur. Cette valeur ne peut pas être modifiée, elle se trouve dans la pile TCP/IP de votre ordinateur. –