![](/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.