我正在下载文件(使用apache tomcat 6.0.32)。当我断开连接(关闭tomcat)时,ASHITTPRequest会产生错误,但有时候(大部分时间都是......完全正确!只有在开头没有连接时才会发生错误)它结束工作就像所有正确一样。
所以有一个问题:为什么会发生这种情况,如何判断连接是否正常丢失。
非常感谢!
更新:
尝试通过TCPMon发送请求然后停止它(TCPMon)并获得相同的结果:ASIHTTPRequest认为正确完成了下载。
更新:
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
更新:
如果用手断开计算机(断开电缆)并获得此信息:
有时ASIHTTPRequest会等到超时,然后下一个请求会出现连接错误。
有时错误发生在我断开连接的时候。
有时错误不会在我断开连接时发生:缺少下载进度和(如果再次建立连接),文件从头开始下载。
如果关闭端口ASIHTTPRequest认为成功完成下载。
我无法理解这种逻辑......
解决方案:
我通过比较标题中的Content-Length和读取的总字节数来解决问题:
NSString *contentLength = [[self.request responseHeaders] valueForKey:@"Content-Length"];
NSString *downloadedBytesCount = [NSString stringWithFormat:@"%llu",[self.request totalBytesRead]];
if ([contentLength isEqualToString:downloadedBytesCount] == NO) {
// error maintain
}
所以我可以检查是否有所有数据,如果没有:保持错误。 在其他情况下(如手动断开连接)ASIHTTPRequest以适当的方式工作并自行生成错误。
答案 0 :(得分:1)
用于检查连接状态我正在使用带有ASI的Reachability库。我相信可达性来自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;
}
}
}
我已根据我的需要改变了一点代码它返回YES / NO。你应该在某个时候删除观察者。
- (void)viewDidUnload
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
感谢。