2011-09-26 67 views
1

在HTTP post連接中實現連接超時(比方說,20秒)的最佳方式是什麼?在HTTP中實現超時

我當前的代碼如下:

-(NSData*) postData: (NSString*) strData 
{  
    //postString is the STRING TO BE POSTED 
    NSString *postString; 

    //this is the string to send 
    postString = @"data="; 
    postString = [postString stringByAppendingString:strData]; 

    NSURL *url = [NSURL URLWithString:@"MYSERVERHERE"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
    NSString *msgLength = [NSString stringWithFormat:@"%d", [postString length]]; 

    //setting prarameters of the POST connection 
    [request setHTTPMethod:@"POST"]; 
    [request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request addValue:msgLength forHTTPHeaderField:@"Content-Length"]; 
    [request addValue:@"en-US" forHTTPHeaderField:@"Content-Language"]; 
    [request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; 
    [request setTimeoutInterval:10.0]; 

    NSLog(@"%@",postString); 

    NSURLResponse *response; 
    NSError *error; 

    NSLog(@"Starting the send!"); 
    //this sends the information away. everybody wave! 
    NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    NSLog(@"Just finished receiving!"); 
    if (&error) //OR TIMEOUT 
    { 
     NSLog(@"ERROR!"); 
     NSString *errorString = [NSString stringWithFormat:@"ERROR"]; 
     urlData = [errorString dataUsingEncoding:NSUTF8StringEncoding]; 
    } 
    return urlData; 
} 

顯然超時間隔設置爲10.0,但似乎沒有任何當這十秒不發生。

+0

您是否實現了'NSURLConnection'委託方法? –

+0

不,我沒有。 – Baub

+0

查看委託方法,我沒有看到提到超時的情況。連接:didReceiveResponse :,連接:didReceiveData:,連接:didFailWithError:和connectionDidFinishLoading :. – Baub

回答