저는 객관적인 C 및 ios 개발에 익숙하지 않습니다. 나는 일반적으로 Java로 Android 앱을 프로그래밍하고 onPause 호출을 사용하여 소켓을 닫습니다. 그러나 applicationWillResignActive에서 close 메소드를 호출하면 스트림 리스너와의 통신이 느슨해지며 입력 및 출력 스트림을 닫을 수 없습니다. 사실 앱이 서버에 연결되어 있어도 두 스트림의 스트림 상태는 NSStreamStatusNotOpen 또는 0을 표시합니다. 어떤 아이디어? 앱이 백그라운드로 이동하면 NSStream을 닫습니다.
는 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");
}
}
조금 더 자세히 설명해 주시겠습니까? 'NSStream'에'close :'를 보내면 그것을 닫고 대리자'stream : handleEvent :'를 보내야합니다. – arbales
나는 문제가 내 AppDelegate에서 NSInputStream 및 NSOutputStream 객체에 액세스 할 수 없다고 생각합니다. 연결 및 연결 끊기 메서드가있는 SocketHandler라는 클래스가 있습니다. UI의 단추에서 연결 및 연결 끊기 메서드를 호출합니다. 그러나 응용 프로그램 위임에 applicationwillresignactive 연결 끊기 메서드를 호출 할 때 응용 프로그램에서 다른 모든 클래스를 수 있기 때문에 그것을 위조 수 스트림 개체를 액세스 할 수없는 역할을합니다. –
버튼에 연결하는 SocketHandler 객체를 어떻게 만들었습니까? 앱 위임자로부터이 객체를 어떻게 발견합니까? –