2017-01-20 5 views
0

私はiOSアプリケーション(Objective C)を持っていて、このアプリケーションはNodeJsを使ってC++バイナリを呼び出します。NodeJS/iOS - HTTP POSTで呼び出した後にバイナリから返された値を取得する方法

はこれまでのところ、私は3

のiOSのAppをAFNetworkingライブラリーでのHTTP POSTを使用して私のアプリ上でクリックされたボタンからリモートで私のC++プログラムを実行することができました - >ボタンをクリック - > HTTP POST - - >ノードJS呼び出し - > C++プログラム呼び出し(後者はtrueまたはfalseを返します)

ここで、私のプログラムから返された値(TrueまたはFalse)を取得したいと思います。どうやってやるの ?

私はすでにGETメソッドを使用してサーバー上のファイルを取得していますが、この場合に使用するのが適切かどうかわかりません。

私はこれをどのように達成することができますか?

感謝

+0

HTTP要求は応答を有します。あなたは彼らがそうではないと思いますか? – OrangeDog

答えて

1

あなたのC++プログラムから返された値を取得できるようにするには、NodeJSから返された結果を取得する最初の必要があります。

あなたのHTTPサーバとしてExpressJSを使用している、あなたのようなものを使用してエンドポイントを実装する必要がありますと仮定すると:それは、呼び出しが成功した場合、サーバは状態200でTrueを応答しますし、それが失敗した場合

var execFile = require('child_process').execFile; 
var express = require('express'); 
var app = express(); 

app.post('/endpoint', function (req, res) { 
    const child = execFile('my_exe', (error, stdout, stderr) => { 
    if (error) { 
     res.status(500).send('False') 
    } else { 

     if (stdout === 'True') { 
      res.status(200).send('True') 
     } else { 
      res.status(500).send('False') 
     } 
    } 
    }); 
}); 

app.listen(3000, function() { 
    console.log('Example app listening on port 3000!'); 
}); 

ステータスがFalseFalseが返されます。

さて、iOSアプリケーションからサーバーへの呼び出しで、あなたは次のようにAlamofireを使用することができます。

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; 

NSURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:@"someURL" parameters:@{} error:nil]; 

NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { 
    if (error) { 
     /* Network error*/ 
     NSLog(@"Error: %@", error); 
    } else { 
     NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 
     switch (httpResponse.statusCode) { 
      case 200: 
       NSLog(@"Success") 
       /* Code in case of success == Server returned True */ 
      default: 
      /* Code in case of no success == Server returned False */ 
       NSLog(@"Error"); 
     } 

    } 
}]; 
[dataTask resume]; 
+0

完全に動作します。ありがとうございました !私は今これをよりよく理解しています。しかし、私はmanager.responseSerializer = [AFHTTPResponseSerializerシリアライザ]を追加しなければならなかった。それ以外の場合は、サーバーが応答を取得したいときに例外をスローします。 "エラー:Error Domain = com.alamofire.error.serialization.response Code = -1016"要求に失敗しました:許容できないcontent-type:text/html " – lilouch

関連する問題