Pregunta

Estoy descargando archivo (con Apache Tomcat 6.0.32). Cuando hago desconectado (apagado Tomcat) algunas veces Ashittprequest genera error, pero a veces (la mayoría de las veces exactamente ... ¡todo el tiempo exactamente! Solo si no hay conexión al principio que ocurra el error) termina funcionando como todo correcto.

Entonces está la pregunta: ¿por qué sucedió esto y cómo puedo ver si la conexión se perdió correctamente?

¡Muchas gracias!

ACTUALIZAR:

Intente enviar la solicitud a través de TCPMON y luego deténgala (TCPMON) y obtenga lo mismo: AsihttpRequest piense que la descarga se realiza correctamente.

ACTUALIZAR:

Responder Headers:

"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

ACTUALIZAR:

Si desconecte la computadora a mano (desconecte el cable) y obtenga esto:

En algún momento asihttprequest espera hasta el tiempo de espera, y la próxima solicitud recibe un error de conexión.

En algún momento, el error ocurre justo a tiempo que me desconecto.

En algún momento, el error no ocurre justo a tiempo que me desconecto: descargue el progreso que falta y (si hace la conexión nuevamente) El archivo comienza a descargar desde el principio.

Y si Close Port AsihttpRequest cree que eso es una descarga exitosa realizada.

No puedo entender esta lógica ...

SOLUCIÓN:

Resuelvo el problema comparando el contenido en el encabezado y los bytes totales leen:

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


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

Entonces puedo verificar si tengo todos los datos y, si no: mantenga el error. En otros casos (como desconectar manualmente), asihttprequest trabaje de manera apropiada y genera errores por uno mismo.

¿Fue útil?

Solución

Para verificar el estado de conexión, estoy usando la biblioteca de accesibilidad con ASI. Creo que la accesibilidad viene con ASI no estoy seguro.

Este no es el código mío que tomé de algún lugar, pero está funcionando perfectamente.

#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;
        }
    }
}

He alterado un poco el código con respecto a mis necesidades, devuelve sí/no. Y debe eliminar el observador en algún momento.

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

Gracias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top