当丢失连接时,Asihttprequest无错误
-
26-10-2019 - |
题
我正在下载文件(带有Apache Tomcat 6.0.32)。当我将断开连接(关闭tomcat)有时会产生错误,但是有时(大多数时候,完全……完全是完全!只有在开始时没有连接的情况下,错误)就会像所有正确的情况一样结束工作。
因此,有一个问题:为什么会发生这种情况,以及如何观察连接是否正确丢失。
非常感谢!
更新:
尝试通过TCPMOM发送请求,然后停止它(TCPMON)并获得相同的内容:Asihttprequest认为正确下载了。
更新:
响应头:
"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
更新:
如果手工断开计算机(断开电缆)并得到此:
有时候,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使用可及性库。我相信ASI不确定可达性。
这不是我从某个地方拿出的矿山代码,但它的工作原理是无瑕的。
#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;
}
}
}
我已经更改了有关我的需求的代码,它返回是/否。您应该在某个时候删除观察者。
- (void)viewDidUnload
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
谢谢。
不隶属于 StackOverflow