ASIHTTPRequest nessun errore quando la connessione persa
-
26-10-2019 - |
Domanda
Io sono file (con Apache Tomcat 6.0.32) scaricando. Quando faccio disconnessione (arresto Tomcat) alcune volte ASHITTPRequest generano errori, ma a volte (il più delle volte esattamente ... ALL TIME ESATTAMENTE! Solo se non c'è connessione, all'inizio si verifica errore) si conclude il lavoro come tutti corretti.
Quindi, c'è la questione:. Perché questo è accaduto e come posso vedere se la connessione ha perso correttamente
Grazie mille!
UPDATE:
Provare a inviare richiesta tramite TCPMon e poi fermarlo (TCPMon) e ottenere lo stesso:. ASIHTTPRequest pensare che lo scaricano correttamente fatto
UPDATE:
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
UPDATE:
Se il computer di disconnessione a mano (scollegare il cavo) e ottenere in questo modo:
A volte ASIHTTPRequest aspetta fino timeout, e successiva richiesta di ottenere il collegamento di errore.
A volte l'errore si verifica solo in I disconnessione tempo.
A volte l'errore non si verifica solo in I disconnessione tempo:. Avanzamento del download mancanti e (se la connessione rendere nuovamente) si avvia il file download dall'inizio
E se vicino porto ASIHTTPRequest pensa che è scaricare il successo fatto.
Non riesco a capire questa logica ...
SOLUZIONE:
I risolvere il problema mettendo a confronto Content-Length nell'intestazione e byte totali leggere:
NSString *contentLength = [[self.request responseHeaders] valueForKey:@"Content-Length"];
NSString *downloadedBytesCount = [NSString stringWithFormat:@"%llu",[self.request totalBytesRead]];
if ([contentLength isEqualToString:downloadedBytesCount] == NO) {
// error maintain
}
Così posso controllare se ho ottenuto tutti i dati e se non: mantenere errore. In altri casi (come scollegare manualmente) ASIHTTPRequest modo adeguato lavoro e genera errori sé.
Soluzione
per la verifica dello stato della connessione sto usando biblioteca di raggiungibilità con ASI. credo raggiungibilità viene fornito con ASI non è sicuro.
questo non è il codice mia ho preso da qualche parte, ma si sta lavorando impeccabile.
#import "Reachability.h"
-(void)viewDidAppear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];
}
- (void) checkNetworkStatus:(NSNotification *)notice
{
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
{
case NotReachable:
{
NSLog(@"The internet is down.");
//self.internetActive = NO;
break;
}
case ReachableViaWiFi:
{
NSLog(@"The internet is working via WIFI.");
//self.internetActive = YES;
break;
}
case ReachableViaWWAN:
{
NSLog(@"The internet is working via WWAN.");
//self.internetActive = YES;
break;
}
}
}
Ho modificato il po 'Codice in materia mie esigenze che restituisce YES / NO. e si dovrebbe rimuovere osservatore ad un certo punto.
- (void)viewDidUnload
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
Grazie.