【发布时间】:2012-07-23 20:01:03
【问题描述】:
我是 Objective C 和 ios 开发的新手。我通常使用 Java 编写 Android 应用程序,并且总是使用 onPause 调用来关闭我的套接字。但是,当我在 applicationWillResignActive 下调用我的关闭套接字方法时,我与我的流侦听器失去了通信,并且无法关闭输入和输出流。事实上,即使应用程序连接到服务器,两个流的流状态都显示 NSStreamStatusNotOpen 或 0。有什么想法吗?
谢谢
编辑
SocketHandler.m 类中的连接方法:
-(void)connect:(int *)port ipAddress:(NSString *)ipAddress
{
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)ipAddress, port, &readStream, &writeStream);
inputStream = (NSInputStream *)readStream;
outputStream = (NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
NSLog(@"input stream id %i", inputStream);
}
-(void)disconnect{
NSLog(@"disconnect method called");
socketStatus = [outputStream streamStatus];
int status = socketStatus;
NSLog(@"Stream Status is %i", status);
if (status == 2) {
[inputStream close];
[outputStream close];
NSLog(@"Socket Closed");
}
}
【问题讨论】:
-
您能详细说明一下吗?调用发送
close:到NSStream应该关闭它,并发送你的代表stream:handleEvent:。 -
我相信问题在于无法从我的 AppDelegate 访问 NSInputStream 和 NSOutputStream 对象。我有一个名为 SocketHandler 的类,它有一个连接和断开连接方法。我从 UI 中的按钮调用连接和断开连接方法。但是,当我从应用程序委托中的 applicationwillresignactive 调用 disconnect 方法时,它的行为就像它无法访问流对象,这很奇怪,因为应用程序中的每个其他类都可以。
-
您是如何创建连接到按钮的 SocketHandler 对象的?你如何从你的应用委托中发现这个对象?
-
在我创建的 SocketHandler 类中创建并初始化了 NSInputStream、NSOutputStream 和 StreamStatus 对象。所以会发生什么是 App Delegate 类调用 SocketHandler 类的方法,这些方法创建流、连接它们和断开它们。如果需要,它还可以回复流状态。但是,当调用 SocketHandler 类中的 connect 方法来创建 Stream 对象并连接它们时,除了 App Delegate 之外的任何其他类都无法访问它们,这很奇怪,因为流不是在 App Delegate 类中创建的。
标签: ios tcp nsstream nsinputstream nsoutputstream