2015-11-17 2 views
12

ich Code unten verwenden, um eine Datei auf den Server zu senden:_kCFStreamErrorCodeKey = -2102 nur mit Wi-Fi von einigen ISPs

NSString *urlString = [NSString stringWithFormat:@"%@%@",[LIUtility sharedUtility].uploadConnectionURL,BR_SERVER_UPLOAD_ADDRESS_FILE]; 

self.request =[[NSMutableURLRequest alloc] init]; 
[self.request setURL:[NSURL URLWithString:urlString]]; 
[self.request setHTTPMethod:@"POST"]; 

PKMultipartInputStream *body = [[PKMultipartInputStream alloc] init]; 

NSString *requestString =[self getRequestStringForRange:range andExtension:fileName]; 
NSData *requestData = [requestString dataUsingEncoding:NSUTF8StringEncoding]; 

NSString *jsonLengthString = [NSString stringWithFormat:@"%04lu",(unsigned long)requestData.length]; 
NSData *jsonLengthData = [jsonLengthString dataUsingEncoding:NSUTF8StringEncoding]; 

[body addPartWithName:@"jsonLength" data:jsonLengthData]; 
[body addPartWithName:@"json" data:requestData]; 
[body addPartWithName:@"separator" string:@"\r\n"]; 
[body addPartWithName:@"fileData" filename:fileName stream:dataStream streamLength:streamSize]; 

[self.request setHTTPBodyStream:body]; 
[self.request setTimeoutInterval:60]; 
NSString *contentType = LI_CONNECTION_CONTENTTYPE; 
[self.request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self]; 
_responseData = [NSMutableData data]; 
[self.connection start]; 

Die Datei auch mit 3G/4G.The Code Upload ist funktioniert, wenn das Gerät angeschlossen ist Wi-Fi von einigen ADSL ISPs aber in einigen anderen ISPs den Code nicht funktionieren und ich unten Fehler:

Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSErrorFailingURLStringKey= http://example.net , _kCFStreamErrorCodeKey=-2102, NSErrorFailingURLKey=http:/example.net:80/au, NSLocalizedDescription=The request timed out., _kCFStreamErrorDomainKey=4, NSUnderlyingError=0x16a40410 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "The request timed out." UserInfo={_kCFStreamErrorCodeKey=-2102, NSErrorFailingURLStringKey= http://example.net , NSErrorFailingURLKey= http://example.net , NSLocalizedDescription=The request timed out., _kCFStreamErrorDomainKey=4}}}

Hat jemand eine Ahnung, was ist das Problem?

Antwort

6

Ich löste schließlich mein Problem, indem ich Content-Length der Anfrage hinzufüge.

Wenn wir die Content-Length Header auf die Anfrage nicht stimmen, scheint NSURLConnection es als chunked Anfrage senden und es solche Probleme mit chunked Anfragen gemeinsam.

Eigentlich finde ich nicht die Ursache des Problems mit dieser chunked Anfrage (Ich suchte viele Themen im Web, liest viele Artikel, sprach mit mehreren anderen Programmierern, aber keine Ursache finden, also entschloss ich mich, die zu verwenden andere Lösung), aber ich teilte diese Lösung für jemanden, der nicht-chunked Anfrage in ihrem Geschäft verwenden kann. Wie ich weiß, sind die meisten Verwendungen von Chunked-Anfragen in Echtzeit-Streaming, dass wir die Content-Length nicht kennen, also wenn Sie Content-Length hinzufügen können, schlage ich vor, es zu verwenden, um Chunked-Probleme wie diese zu vermeiden.

+1

Das funktionierte auch für mich. Nicht sicher, ob dies relevant ist, aber als Referenz: Xcode 7.2 mit Swift, iPad mit iOS 9.2.1. Ein neuer Apple AirPort hatte das Problem; ein älterer nicht. –

0

ich nur das Problem gelöst haben ...

Ich hoffe, dies könnte Ihnen helfen, wenn Sie nicht die Lösung im Internet finden, da dies eine persönliche Erfahrung.

Ich hatte alle HTTP-Header, alle Parameter und überprüft alle Programmierung auf Objective-C, aber ich hatte vergessen, Server-Seite zu überprüfen, meine Architektur enthalten 3 Komponenten: Die App, REST-Server und ein Dateiserver, Datei Server hatte Netzwerkprobleme mit der Domain, deshalb war die App nicht funktionierend, nach der Lösung des Problems funktionierte sie perfekt.

0

Wenn Sie eine Enterprise-Version der Anwendung ausführen, erkundigen Sie sich bei Ihrem Serveradministrator, ob Ihr Cert auf dem neuesten Stand und mit Ihrem Firewallserver kompatibel ist. Meins ist nicht.

Verwandte Themen