gpt4 book ai didi

ios - NSStream 委托(delegate)未触发错误

转载 作者:可可西里 更新时间:2023-11-01 02:43:28 26 4
gpt4 key购买 nike

我正在努力解决 NSStream 委托(delegate)的问题。

我的应用创建并打开 10 个并发 TCP 客户端,并连接到我控制的设备中的 10 个 TCP 服务器。我正在创建 10 个套接字,每个套接字都有自己独特的输入和输出流。它们都反馈给一个流委托(delegate)来处理流事件。

我能够毫无问题地在所有 10 个套接字上进行连接和通信。

然而,当我拔下一个或多个服务器时,我在 iPad 上的连接仍显示其已建立状态并且 [outputStream status] 消息返回 2。

我希望流在服务器断开连接时显示错误事件,但这似乎并没有发生。

这是我将多个流连接到单个委托(delegate)时做错了什么,还是存在其他一些更基本的问题?

设置委托(delegate)的套接字创建示例:

-(void)connectToHub0 {  
launchflag = 1;

NSLog(@"trying to connect to hub 0");

/
UInt32 port;
port = 40000;

launchTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector (launchTimeOut:) userInfo:nil repeats:NO];

Hub *currentHub = [Hubs objectAtIndex:0];

/
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)currentHub.ipAddress, port, &readStream, &writeStream);
inputStream = (__bridge NSInputStream *)readStream;
outputStream = (__bridge NSOutputStream *)writeStream;

[inputStream setDelegate:self];
[outputStream setDelegate:self];

[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

[inputStream open];
[outputStream open];
}

委托(delegate)在我的 viewController.m 中设置为:

@interface viewController()<NSStreamDelegate>

最佳答案

这是 TCP 套接字的正常行为。检测此类断开连接的一种方法是使用 keep-alive 数据包作为网络协议(protocol)的一部分。

参见 this interesting article以获得更详细的答案。

关于ios - NSStream 委托(delegate)未触发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34615807/

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