提问者:小点点

_kCFStreamErrorCodeKey=-2102仅适用于某些ISP的wifi


我使用以下代码将文件发送到服务器:

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

文件正在用3G/4G上传。当设备连接到一些ADSL ISPs的wifi时,代码也可以工作,但在其他一些ISP中,代码不工作,我得到以下错误:

错误域=NSURLErrorDomain Code=-1001“请求超时。”UserInfo={NSErrorFailingURLStringKey=http://example.net,_kCFStreamErrorCodeKey=-2102,NSErrorFailingURLKey=http://example.net:80/au,NSLocalizedDescription=请求超时_kCFStreamErrorDomainKey=4,NSUnderlyingError=0x16a40410{Error Domain=kCFErrorDomainCF Network Code=-1001“请求超时。”UserInfo={_kCFStream ErrorCodeKey=-2102,NSErrorFailingURLStringKey=http://example.net,NSErrorFailingURLKey=http://example.net,NSLocalizedDescription=请求超时_kCFStreamErrorDomainKey=4}}

有人知道问题出在哪里吗?


共3个答案

匿名用户

我最终通过在请求中添加< code>Content-Length解决了我的问题。

当我们不向请求中添加Content-Length标头时,NSURLConnection将其作为分块请求发送,这类问题似乎在分块请求中很常见。

实际上,我没有找到这个< code>chunked请求问题的根本原因(我在网上搜索了许多主题,阅读了许多文章,与其他几个程序员交谈,但没有找到任何根本原因,所以我决定使用其他解决方案),但我将这个解决方案分享给了可以在业务中使用非分块请求的人。据我所知,分块请求的大多数用法是在实时流中,我们不知道< code>Content-Length,所以如果您可以添加< code>Content-Length,我建议使用它来避免类似这样的分块问题。

匿名用户

如果您运行的是企业版应用程序,请与服务器管理员联系,以查看您的证书是否是最新的并且与您的防火墙服务器兼容。我的不是。

匿名用户

我刚刚解决了这个问题...

我希望如果你在互联网上找不到解决方案,这会对你有所帮助,因为这是个人经历。

我已经配置了所有HTTP标头,所有参数并检查了Objective-C上的所有编程,但我忘记检查服务器端,我的架构包括3个组件:应用程序,REST服务器和文件服务器,文件服务器与域有网络问题,所以这就是原因,因为应用程序不工作,解决问题后,它工作得很好。