我從app開始連接到服務器的appdelegate中設置套接字連接。 在appdelegate.h如何從appdelegate共享NSOutputStream?
@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];
它運行良好時,應用程序啓動時。溝通也很好。
然後我有一個選項卡控制器。每個選項卡都需要通過此套接字將數據交換到服務器。我不想爲每個選項卡創建不同的套接字。
如何使用相同的outputstream/inputstream?
我嘗試這firstviewcontroall.m但失敗:
- (void)viewDidLoad
{
[super viewDidLoad];
NSData *data = [[NSData alloc] initWithData:[@"hello this is firstview" dataUsingEncoding:NSUTF8StringEncoding]];
[outputStream write:[data bytes] maxLength:[data length]];
}
沒有DATAS發送給服務器。我不想在每個視圖控制器上創建一個套接字到服務器。這浪費了太多資源。我的問題是如何通過一個套接字連接發送/接收數據?
是的,謝謝,輸出流正在工作。但我無法使輸入流工作。輸入流在appdelegate.m中正常工作,但firstviewcontroller.m。 – STANLEY
@STANLEY:請參閱最新的答案。 – Apurv
它顯示警告「NSInputstream可能不響應'方法'」。有一種方法已經在appdelegate.m中響應inputstream。我猜這兩個方法是彼此交錯的。有沒有辦法將appdelegate.m中的變量傳遞給fristviewcontrol.m,然後激活另一種方法來執行其他操作? – STANLEY