2

ユーザーをサーブに接続するアプリケーションがあります。ユーザーはホストに接続して、IP アドレスを挿入して通信したり、NSStream を使用して通信したりできます。接続ボタンを押すと、ホストへの接続が開始され、ユーザーはメッセージを送受信できます。

切断ボタンを押すのを聞かないように、ユーザーがサーバーから切断できるようにしたいと考えています。問題は、ストリームを正常に閉じることができないことです。

これは私の現在の実装です:

// Create connection "Connect Button"
- (void)initNetworkCommunication:(UIViewController *)sender {
    CFReadStreamRef readStream;
    CFWriteStreamRef writeStream;
    CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"123.456.789.123", 80, &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];
    controller = sender;
}

// Stop connection "Disconnect Button"
- (void)stopNetworkConnection {
    [inputStream close];
    [outputStream close];
    [inputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [outputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [inputStream release];
    [outputStream release];
    inputStream = nil;
    outputStream = nil;
    NSLog(@"Disconnect from stream");
}

操作の流れは次のとおりです。

  1. ユーザーは有効な IP アドレスを挿入します。
  2. ユーザーは「接続ボタン」を押します。
  3. すべてが正常に機能し、接続が確立され、ユーザーはメッセージを送受信できます。
  4. ユーザーが「切断ボタン」を押しても、ユーザーはメッセージを受信しません。
  5. ユーザーが「接続ボタン」を押したが、接続できなくなった

この解決策を試しましたが、うまくいきませんでした:

NSStream のクローズとオープンのエラー

助けてくれてありがとう

4

0 に答える 0