Frage

Ich lade die Datei herunter (mit Apache Tomcat 6.0.32). Wenn ich Trennung (Tomcat) manchmal mache, erzeugen Ashittprequest Fehler, aber manchmal (meistens genau ... genau alle Zeiten! Nur! Nur, wenn es zu Beginn keine Verbindung auftritt) funktioniert es wie alle korrekt.

Es gibt also die Frage: Warum dies passiert ist und wie kann ich beobachten, ob die Verbindung richtig verloren ist.

Danke vielmals!

AKTUALISIEREN:

Versuchen Sie, die Anfrage über TCPMon zu senden und dann zu stoppen (tcpmon) und das gleiche erhalten: asihttprequest denken Sie, dass das Herunterladen korrekt gemacht wurde.

AKTUALISIEREN:

Reaktionsleiter:

"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";

ResponstatusMessage:

 HTTP/1.1 200 OK

AKTUALISIEREN:

Wenn Computer von Hand trennen (das Kabel trennen) und Folgendes erhalten:

Irgendwann wartet ASIHTTPREQUEST bis zur Zeitüberschreitung, und die nächste Anforderung erhalten einen Verbindungsfehler.

Manchmal trenne ich mich nur noch rechtzeitig ein Fehler.

Manchmal tritt ich nicht rechtzeitig auf, wenn ich nicht zu rechtzeitig trenne: Download Fortschritt fehlend und (falls die Verbindung wieder herstellen) IT -Datei beginnt von Anfang an den Download.

Und wenn der enge Port Asihttprequest denkt, dass dies erfolgreich heruntergeladen wird.

Ich kann diese Logik nicht verstehen ...

LÖSUNG:

Ich löste das Problem, indem ich die Inhaltslänge in Header- und Gesamtbytes vergleicht, die gelesen werden:

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


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

Ich kann also überprüfen, ob ich alle Daten habe und wenn nicht: Fehler beibehalten. In anderen Fällen (z.

War es hilfreich?

Lösung

Zur Überprüfung des Verbindungsstatus verwende ich die Erreichbarkeitsbibliothek mit ASI. Ich glaube, die Erreichbarkeit ist mit ASI nicht sicher.

Dies ist nicht mein Code, den ich irgendwohin genommen habe, aber er funktioniert fehlerfrei.

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

Ich habe den Code ein wenig geändert, was meine Bedürfnisse zurückgibt. Es gibt Ja/Nein zurück. und Sie sollten den Beobachter irgendwann entfernen.

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

Danke.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top