我从应用程序启动连接到服务器时在 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]];
}
没有数据发送到服务器。我不想在每个视图控制器上创建一个到服务器的套接字。太浪费资源了。我的问题是如何通过一个套接字连接发送/接收数据?