1
次のコードを使用して、サーバーに接続し、イベントを処理します。
ほとんどコピー貼り付けのhttp://www.devx.com/wireless/Article/43551(iphone)どのようにクローズソケットストリームを強制するには?
NSStreamEventEndEncounteredの前にストリームを強制的に閉じる必要があります。
ドキュメントには欠けており、接続に関連するストリームを強制的に閉じる方法を理解するのに苦労しています。 (私がしなければならない場合、基本となるソケットまたは近い)
は
-(void) connectToServerUsingStream:(NSString *)urlStr
portNo: (uint) portNo {
if (![urlStr isEqualToString:@""]) {
NSURL *website = [NSURL URLWithString:urlStr];
if (!website) {
NSLog(@"%@ is not a valid URL");
return;
} else {
[NSStream getStreamsToHostNamed:urlStr
port:portNo
inputStream:&iStream
outputStream:&oStream];
[iStream retain];
[oStream retain];
[iStream setDelegate:self];
[oStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStream open];
[iStream open];
}
}
}
とイベント
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
NSLog(@"stream event %d", eventCode) ;
if(stream == iStream) NSLog(@"on input stream");
else if(stream == oStream) NSLog(@"on output stream");
else NSLog(@"on unknown stream identifier") ;
switch(eventCode) {
case NSStreamEventEndEncountered:
{
NSLog(@"stream ended; will be closed") ;
[stream close];
[stream removeFromRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[stream release];
stream = nil; // stream is ivar, so reinit it
break;
}
case NSStreamEventErrorOccurred:
NSLog(@"stream error") ;
break ;
case NSStreamEventHasBytesAvailable:
//TODO: read here
break ;
case NSStreamEventNone:
NSLog(@"stream null event") ;
break ;
case NSStreamEventOpenCompleted:
NSLog(@"stream is now open") ;
break ;
case NSStreamEventHasSpaceAvailable:
//write here
break ;
}
}
これは私のために働いていないようです..任意のアイデア? – Roshit
詳細/コード – ZhangChn
を上記のコードと同じ部分を提供しないかどうかはわかりません。私が直接self.inputStreamとself.outputStreamを使用したという事実を除いて...自己の使用法は問題になりますか? – Roshit