質問

ファイルをダウンロードしています(Apache Tomcat 6.0.32を使用)。切断すると、時々Ashittprequestがエラーを生成することがありますが、時には(ほとんどの場合...正確に...最初に接続が発生しない場合にのみ)すべての正しいように機能します。

質問があります。なぜこれが起こったのか、接続が適切に失われた場合にどのように視聴できるのか。

どうもありがとう!

アップデート:

TCPMONを介してリクエストを送信してから、それを停止し(TCPMON)、同じことを取得してみてください。

アップデート:

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

restonsestatusmessage:

 HTTP/1.1 200 OK

アップデート:

コンピューターを手で切断する場合(ケーブルを切断)、これを取得します。

時々ASIHTTPREQUESTがタイムアウトまで待機し、次のリクエストが接続エラーを取得します。

いつかエラーが発生します。

ある時期にエラーは発生しません。

そして、近くのポートAsiHttpRequestがそれが成功したことを考えている場合、ダウンロードが完了しました。

この論理がわかりません...

解決:

ヘッダーのコンテンツ長と合計バイトの読み取りを比較することにより、問題を解決します。

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


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

そのため、すべてのデータを取得したかどうかを確認できます。エラーを維持します。他の場合(手動で切断するなど)asihttprequestは適切な方法で動作し、自己によってエラーを生成します。

役に立ちましたか?

解決

接続ステータスをチェックするために、ASIを使用してReachabilityライブラリを使用しています。到達可能性は確かではないと思います。

これは私がどこかから取った鉱山コードではありませんが、完璧に機能しています。

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

私は自分のニーズについてコードを少し変更しました。それはyes/noです。ある時点でオブザーバーを削除する必要があります。

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

ありがとう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top