![](/img/trans.png)
[英]NSStream Delegate NSStreamEventHasBytesAvailable Not Being Called
[英]NSStream delegate not firing errors
我正在努力解决NSStream委托的问题。
我的应用程序创建并打开10个并发TCP客户端,并连接到我控制的设备中的10个TCP服务器。 我正在创建10个套接字,每个套接字都有自己独特的输入和输出流。 它们全部反馈给一个流委托以处理流事件。
我能够在所有10个套接字上进行连接和通信,而不会出现问题。
但是,当我拔出一个或多个服务器时,iPad上的连接仍显示其状态为已建立,并且[outputStream status]消息返回2。
我希望当服务器断开连接时,流将显示一个错误事件,但是这似乎没有发生。
我是否通过将多个流连接到单个委托做错了事,还是还有其他更根本的问题?
我的套接字创建示例,它设置了委托:
-(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];
}
委托在我的viewController.m
设置为:
@interface viewController()<NSStreamDelegate>
这是TCP套接字的正常行为。 检测这种类型的断开连接的一种方法是使用保持活动数据包作为网络协议的一部分。
有关更详细的答案,请参见这篇有趣的文章 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.