サーバーへの接続を開始するアプリから 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 つのソケット接続でデータを送受信するにはどうすればよいですか?