Ios 关闭WiFi后,NSStream写入套接字不会出现错误。为什么?
你好 我在iPhone上为PC上运行的应用程序编写自定义控制器。我使用标准编码在ios客户端上设置并打开套接字并写入/接收数据。在我去一个wifi连接薄弱的地区之前,一切都很好,iPhone或PC都失去了连接。我在iPhone上添加了一个wifi连接测试,使用的是Ios 关闭WiFi后,NSStream写入套接字不会出现错误。为什么?,ios,iphone,sockets,nsstream,Ios,Iphone,Sockets,Nsstream,你好 我在iPhone上为PC上运行的应用程序编写自定义控制器。我使用标准编码在ios客户端上设置并打开套接字并写入/接收数据。在我去一个wifi连接薄弱的地区之前,一切都很好,iPhone或PC都失去了连接。我在iPhone上添加了一个wifi连接测试,使用的是可达性,效果与预期一致。我假设使用与NSStream相关的三种可能的错误检查方法之一可以让我知道连接的远程端(即PC)是否有问题 我首先发送了一条[OutputStreamStatus]消息,希望在我关闭电脑上的wifi适配器时收到一条
可达性
,效果与预期一致。我假设使用与NSStream
相关的三种可能的错误检查方法之一可以让我知道连接的远程端(即PC)是否有问题
我首先发送了一条[OutputStreamStatus]
消息,希望在我关闭电脑上的wifi适配器时收到一条NSStreamStatusError
代码。我收到的是一条NSStreamStatusOpen
代码
第二次尝试是从write:maxLength:
检查-1返回代码。相反,这给出了成功发送的字节数(假定)
第三次尝试是显式查看NSStream
委托接收的代码。大多数时候,它是可用的,但从来没有出现过
有人知道为什么吗?NSStream
是否与可达性
(旧版本)类似&只要手机有连接,您是否满意
谢谢你的见解
RB偶尔,尤其是使用套接字时,流可能会遇到错误,从而阻止流数据的进一步处理。通常,错误表示流的一端缺少某些内容,例如远程主机崩溃或正在流的文件被删除。当大多数错误发生时,流的客户端除了向用户报告错误外,还可以做一些事情。虽然报告了错误的流对象可以在关闭前查询其状态,但不能将其重新用于读或写操作
NSStream
和NSOutputStream
类会在错误以多种方式发生时通知您:
1.如果流对象被安排在运行循环中,则该对象会在流:handleEvent:message
中向其委托报告nsstreamventerrocurred
事件
2.客户端可以随时向流对象发送streamStatus
消息,查看是否返回NSStreamStatusError
3.如果您试图通过发送write:maxLength:
对象来写入NSOutputStream
对象,并且该对象返回-1,则发生写入错误
确定流对象发生错误后,可以使用streamError消息查询该对象,以获取有关错误的更多信息(以NSError对象的形式)。接下来,将错误告知用户。清单1显示了运行循环调度流对象的委托如何处理错误
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
NSLog(@"stream:handleEvent: is invoked...");
switch(eventCode) {
case NSStreamEventErrorOccurred:
{
NSError *theError = [stream streamError];
NSAlert *theAlert = [[NSAlert alloc] init];
[theAlert setMessageText:@"Error reading stream!"];
[theAlert setInformativeText:[NSString stringWithFormat:@"Error %i: %@",
[theError code], [theError localizedDescription]]];
[theAlert addButtonWithTitle:@"OK"];
[theAlert beginSheetModalForWindow:[NSApp mainWindow]
modalDelegate:self
didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:)
contextInfo:nil];
[stream close];
[stream release];
break;
}
// continued ....
}
}
有关更多详细信息:Ramshad:Thx。用于文档的上载/链接。从问题中可以看出,我尝试了所有三种建议的方法,但没有一种给我错误,尽管我通过关闭wifi连接模拟了“远程主机崩溃”。还是没有人更聪明。铷