gpt4 book ai didi

ios - NSStream 写入套接字不会在 WiFi 关闭时出现错误。为什么?

转载 作者:行者123 更新时间:2023-11-28 22:17:32 25 4
gpt4 key购买 nike

美好的一天,

我正在 iPhone 上为 PC 上运行的应用程序编写自定义 Controller 。我正在使用标准编码在我的 ios 客户端上设置和打开套接字并写入/接收数据。一切正常,直到我去了一个 wifi 连接较弱的区域,iPhone 或 PC 失去了连接。我使用 Reachability 在 iPhone 上添加了一个 wifi 连接测试,它按预期工作。我假设使用与 NSStream 关联的三种可能的错误检查方法之一会让我知道连接的远程端(即 PC)是否有问题。

我首先发送一条[outputStream streamStatus] 消息,希望在我关闭 PC 上的 wifi 适配器时收到 NSStreamStatusError 代码。我得到的是一个 NSStreamStatusOpen 代码。

第二次尝试是检查来自 write: maxLength: 的 -1 返回代码。相反,这给出了成功发送的字节数(据推测)。

第三次尝试是明确查看 NSStream 委托(delegate)接收的代码。大多数时候它是 NSStreamEventHasSpaceAvailable 但从来没有 NSStreamEventErrorOccurred

有人知道为什么吗? NSStream 是否类似于 Reachability(旧版本)并且只要手机有连接就很开心?

感谢任何见解。

RB

最佳答案

有时,尤其是对于套接字,流可能会遇到阻止进一步处理流数据的错误。通常,错误表示流的一端缺少某些内容,例如远程主机崩溃或正在流式传输的文件被删除。当大多数错误发生时,流的客户端可以做一些事情,除了向用户报告错误。尽管可以在关闭之前查询已报告错误的流对象的状态,但不能将其重新用于读取或写入操作。

如果发生错误,NSStreamNSOutputStream 类会以多种方式通知您:

1.如果流对象被安排在一个运行循环中,该对象会在 stream:handleEvent: message 中向其委托(delegate)报告一个 NSStreamEventErrorOccurred 事件。

2.客户端可以随时向流对象发送streamStatus消息,并查看它是否返回NSStreamStatusError

3.如果您尝试通过发送 write:maxLength: 来写入一个 NSOutputStream 对象,并且它返回 -1,则发生写入错误。

一旦确定流对象遇到错误,就可以使用 streamError 消息查询对象以获取有关错误的更多信息(以 NSError 对象的形式)。接下来,将错误告知用户。 list 1 展示了运行循环调度流对象的委托(delegate)如何处理错误。

- (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 ....
}
}

更多详情:Developer.Apple - Handling Stream Errors

关于ios - NSStream 写入套接字不会在 WiFi 关闭时出现错误。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21266211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com