繁体   English   中英

将数据从c ++(opencv应用程序)传递到php

[英]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_phpstd::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM