1

この非常に役立つチュートリアルを使用して、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
}

私が言ったように、ローカルホストでは魅力のように機能しますが、ワイヤレスネットワークを介してフェイルオーバーします。

4

1 に答える 1

1

さて、MayaでcommandPortを作成するための他の誰かのpythonスクリプトを掘り下げて、私自身の答えを見つけました。実際には、iOS コードが原因ではありません。Maya では、ポート番号だけでなく IP アドレスも使用して commandPort を作成する必要があることがわかりました。私の間違いは、commandPort がローカル IP アドレスを知っているか、気にしないと思っていたことです。どうやら気になるようです。

前(簡略化されたコード):

cmds.commandPort (n=':6328', stp='python')

後:

cmds.commandPort (n='192.168.2.7:6328', stp='python')
于 2013-03-05T05:48:54.180 に答える