[英]passing data from c++(opencv application) to php
目前,我正在编写一个opencv C ++应用程序。 我希望此c ++程序始终处于等待状态,并且一旦用户单击php代码(Jquery)上的按钮,该程序将被激活。 我决定使用套接字来激活程序,并且在该程序完成运行后,我不知道如何将值传递回php。 任何人都建议任何解决方案。 我在互联网上搜索了很多内容,但是其中大多数都每次都必须重新启动程序才能获取数据,例如将数据从C ++传递到PHP 。 谢谢
该程序完成运行后,我不知道如何将值传递回php
我想以后是关键字在这里。 我怀疑您的困惑源于您以某种方式希望将C ++程序的返回值传递给PHP程序的事实,例如:
int main()
{
// ...
return value; // to PHP
}
这是错误的方法。 您的C ++程序必须在运行时使用套接字将数据传递给PHP。
我建议您尝试使用Boost.Asio开发C ++套接字部分。 看一下示例,尤其是最简单的示例之一, blocking_tcp_echo_server.cpp 。 转到http://www.boost.org/users/download/了解如何在您的计算机上安装Boost。
这是一个基于Boost示例的非常简短的C ++程序:
#include <iostream>
#include <string>
#include <sstream>
#include <boost/bind.hpp>
#include <boost/smart_ptr.hpp>
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
using boost::asio::ip::tcp;
typedef boost::shared_ptr<tcp::socket> socket_ptr;
void session(socket_ptr sock)
{
std::cout << "session...\n";
try
{
boost::system::error_code error;
boost::asio::streambuf buffer;
boost::asio::read_until(*sock, buffer, "\n", error);
if (error)
{
throw boost::system::system_error(error);
}
std::istream str(&buffer);
std::string from_php;
std::getline(str, from_php);
std::cout << from_php << "\n";
std::string const from_cpp = "from C++";
boost::asio::write(*sock, boost::asio::buffer(from_cpp));
std::cout << "finished\n";
}
catch (std::exception const &e)
{
std::cerr << "Exception in thread: " << e.what() << "\n";
}
}
void server(boost::asio::io_service &io_service)
{
tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), 1234));
for (;;)
{
socket_ptr sock(new tcp::socket(io_service));
a.accept(*sock);
boost::thread t(boost::bind(session, sock));
}
}
int main()
{
try
{
boost::asio::io_service io_service;
server(io_service);
}
catch (std::exception const &e)
{
std::cerr << "Exception: " << e.what() << "\n";
}
}
它在端口1234上接收一个字符串,并将其保存在名为from_php
的std::string
。 PHP中的字符串必须以'\\n'
结尾。 然后,它将字符串"from C++"
发送回去,最终关闭套接字。
现在查看PHP文档的套接字示例 (查找“ Example#2 Socket example:Simple TCP / IP client”)。 再次,这是一个简化的版本:
<?php
error_reporting(E_ALL);
$service_port = 1234;
$address = gethostbyname('localhost');
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n");
}
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
die("socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n");
}
$in = "from PHP\n";
socket_write($socket, $in, strlen($in));
$from_cpp = "";
while ($data = socket_read($socket, 2048)) {
$from_cpp .= $data;
}
echo $from_cpp;
socket_close($socket);
?>
它将字符串"from PHP\\n"
发送到localhost上的端口1234,并从中接收回来的字符串,并将其存储在变量from_cpp
。
这将为您提供足够的信息以供进一步研究。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.