我是客观的C和ios开发的新手。我通常使用Java对Android应用程序进行编程,并始终使用onPause调用来关闭套接字。但是,当我在applicationWillResignActive下调用我的close socket方法时,我与我的流监听器失去了通信,无法关闭输入和输出流。实际上,即使应用连接到服务器,流的流状态也显示NSStreamStatusNotOpen或0。有任何想法吗?当应用程序转到后台时关闭NSStreams
谢谢
编辑
连接方法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:'。 – arbales 2012-07-23 20:11:12
我相信问题是无法从我的AppDelegate访问NSInputStream和NSOutputStream对象。我有一个名为SocketHandler的类,它有一个连接和断开方法。我从UI中的按钮调用连接和断开方法。然而,当我从应用程序中调用断开连接方法将会在应用程序代理中激活时,它就像不能访问更为奇怪的流对象,因为应用程序中的每个其他类都可以。 – 2012-07-23 21:22:15
您是如何创建连接到按钮的SocketHandler对象的?你如何从应用程序委托中发现这个对象? – 2012-07-23 21:55:36