この非常に役立つチュートリアルを使用して、iOSシミュレーターとMaya間のソケット通信のテスト(ビデオ)をまとめることができました。これは、シミュレーターとローカルホストで非常にうまく機能しています。ただし、同じワイヤレスネットワークを介してデバイスでテストすると、iOSアプリケーションがMayaとの接続なしでハングします(接続時に、小さな「ヘッドアップ」メッセージが表示されます)。
特にiOSプログラミングとソケットプログラミングは初めてですが、何か足りないものがあるのではないかと思います。「接続」ボタンを押して呼び出すメソッドは次のとおりです。
- (void) initNetworkCommunication {
//assign text inputs to variables
self.ipAddress = self.inputIPAddress.text;
self.portNumber = [self.inputPortNumber.text intValue];
//create streams and use variables to populate connection method
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)(self.ipAddress), self.portNumber, &readStream, &writeStream);
inputStream = (__bridge NSInputStream *)readStream;
outputStream = (__bridge NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
//send initial message to Maya
NSString *initResponse = [NSString stringWithFormat:@"cmds.headsUpMessage('connected to iPhone')"];
NSData *initData = [[NSData alloc] initWithData:[initResponse dataUsingEncoding:NSASCIIStringEncoding]];
[outputStream write:[initData bytes] maxLength:[initData length]];
//need some error checking or timeout mechanism
}
私が言ったように、ローカルホストでは魅力のように機能しますが、ワイヤレスネットワークを介してフェイルオーバーします。