2011-04-28 1 views
1

Je télécharge un fichier (avec apache tomcat 6.0.32). Quand je fais déconnecter (shutdown tomcat) quelques fois ASHITTPRequest génère une erreur, mais parfois (la plupart du temps exactement ... TOUS LES TEMPS EXACTEMENT! Seulement s'il n'y a pas de connexion au début se produit erreur) finit le travail comme tout correct. Donc, il y a la question: pourquoi cela est-il arrivé et comment puis-je regarder si la connexion a perdu correctement.ASIHTTPRequest pas d'erreur en cas de perte de connexion

Merci beaucoup!

MISE À JOUR:

Essayez d'envoyer la demande par TCPMon puis l'arrêter (TCPMon) et obtenir le même: ASIHTTPRequest pense que le téléchargement est fait correctement.

MISE À JOUR:

responseHeaders:

"Content-Disposition" = attachment; 
"Content-Length" = 2277888; 
"Content-Type" = "application/octet-stream"; 
Date = "Thu, 28 Apr 2011 12:35:32 GMT"; 
Server = "Apache-Coyote/1.1"; 
"Set-Cookie" = "JSESSIONID=98CAE6C0C4275B528D5E0F8651546AFE; Path=/ISED"; 

responseStatusMessage:

HTTP/1.1 200 OK 

MISE À JOUR:

Si l'ordinateur déconnecter manuellement (débranchez le câble) et obtenir ceci:

Parfois ASIHTTPRequest attend till timeout et la requête suivante obtient une erreur de connexion.

Une erreur se produit parfois juste au moment où je me déconnecte.

Parfois, une erreur ne se produit pas juste à temps Je me déconnecte: la progression du téléchargement est manquante et (si je rétablis la connexion) le fichier commence le téléchargement depuis le début.

Et si le port proche ASIHTTPRequest pense que le téléchargement a réussi.

Je ne comprends pas cette logique ...

SOLUTION:

Je résous le problème en comparant Content-Length en-tête et le total des octets lus:

NSString *contentLength = [[self.request responseHeaders] valueForKey:@"Content-Length"]; 
NSString *downloadedBytesCount = [NSString stringWithFormat:@"%llu",[self.request totalBytesRead]]; 


     if ([contentLength isEqualToString:downloadedBytesCount] == NO) { 
      // error maintain 
     } 

donc je peux vérifier si j'ai toutes les données et sinon: maintenir une erreur. Dans d'autres cas (comme la déconnexion manuelle) ASIHTTPRequest fonctionne de manière appropriée et génère des erreurs par soi-même.

+0

Avez-vous testé cela avec NSURLConnection?Que dit la réponse (en-tête et corps) dans la méthode déléguée requestFinished? –

Répondre

1

pour vérifier l'état de la connexion J'utilise la bibliothèque d'accessibilité avec ASI. Je crois que l'accessibilité vient avec ASI pas sûr.

Ce n'est pas mon code que j'ai pris de quelque part mais il fonctionne sans faille. J'ai changé le code peu en ce qui concerne mes besoins, il renvoie OUI/NON. et vous devriez retirer l'observateur à un moment donné.

- (void)viewDidUnload 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

merci.

Questions connexes