1

サーバーへの接続を開始するアプリから appdelegate にソケット接続を設定しました。appdelegate.h で

@interface AppDelegate : NSObject <NSStreamDelegate,UIApplicationDelegate> {
    UIWindow *window;
    UITabBarController *tabBarController;
    NSInputStream *inputStream;
 NSOutputStream *outputStream;
}

次に、appdelegate.m でサーバーへの接続を設定します。

 CFReadStreamRef readStream;
 CFWriteStreamRef writeStream;
 CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"111.111.111.11", 111, &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];

アプリの起動時にうまく動作します。コミュニケーションも上手に。

そして、タブコントローラーがあります。すべてのタブは、このソケットによってサーバーにデータを交換する必要があります。タブごとに異なるソケットを作成したくありません。

同じ出力ストリーム/入力ストリームを使用するにはどうすればよいですか?

私は firstviewcontroall.m でこれを試しましたが失敗しました:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSData *data = [[NSData alloc] initWithData:[@"hello this is firstview" dataUsingEncoding:NSUTF8StringEncoding]];
 [outputStream write:[data bytes] maxLength:[data length]];
}

サーバーに送信するデータはありません。サーバーへのすべてのビューコントローラーにソケットを作成したくありません。あまりにも多くのリソースを浪費します。私の質問は、1 つのソケット接続でデータを送受信するにはどうすればよいですか?

4

2 に答える 2