我有一个 iOS 应用程序 (Objective C),这个应用程序使用 NodeJs 调用一些 C++ 二进制文件。
到目前为止,我已经能够使用 AFNetworking 3 库使用 HTTP POST 从我的应用程序上单击的按钮远程执行我的 C++ 程序。
iOS App --> 点击按钮 --> HTTP POST --> Node JS 调用 --> C++ 程序调用(后者返回 true 或 false)
现在,我想获取程序返回的值(True 或 False)。我该怎么做?
我已经使用 GET 方法在我的服务器上获取文件,但我不知道在这种情况下使用它是否合适,即获取我的程序的返回结果。
你知道我怎样才能做到这一点吗?
感谢
最佳答案
为了能够检索 C++ 程序返回的值,您首先需要从 NodeJS 检索返回的结果。
假设你使用 ExpressJS
作为你的 HTTP 服务器,你应该用类似的东西来实现你的端点:
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!');
});
如果调用成功,服务器将响应 True
状态 200,如果失败,它将返回 False
状态 False
.
现在,在从 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];
关于c++ - NodeJS/iOS - 如何在使用 HTTP POST 调用后从二进制文件中获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41763694/