目前我正在编写一个opencv C++应用程序。我希望这个C++程序一直处于等待状态,一旦用户点击了php代码(jquery)上的按钮,程序就会被激活。我决定使用套接字来激活程序,并且我不知道如何在程序运行完成后将值传回给php。任何人都会建议任何解我在互联网上搜索了很多,但其中大多数都必须每次重新启动程序才能获取数据,如Passing data from C++ to PHP。由于将数据从C++(opencv应用程序)传递到php
0
A
回答
1
我不知道怎么传值回这个节目 完成运行
后到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。
下面是基于该升压例的非常短的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 documentation's socket examples(查找“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"
到端口1234上的本地主机和接收字符串返回从它,它存储在变量from_cpp
。
这应该给你足够的信息来玩并做进一步的研究。
相关问题
- 1. 将数据从C#传递到PHP
- 2. 将数据从C++程序传递到linux上的python程序
- 3. PHP - 将数据过滤并传递到我的应用程序
- 4. C#程序将数据传递给第三个应用程序
- 5. 将数据从Facebook传递到iFrame应用程序
- 6. WIndows Phone 8.1 WNS将数据从Toast传递到应用程序
- 7. 如何将数据从网页传递到应用程序?
- 8. Flex:将数据从preloader传递到应用程序?
- 9. 将内存中的数据从PHP传递到.Net程序
- 10. 将一个值从PHP应用程序传递到Angular4应用程序
- 11. 如何将数据从非托管应用程序传递到C#COM DLL
- 12. 将许多数据从Python传递到C程序
- 13. 从android应用程序将变量传递到php web表单
- 14. 将Foreach数据从PHP传递到Ajax
- 15. 将数据从Ajax传递到PHP
- 16. 将数据从PHP脚本发送到C#应用程序
- 17. 将数据传递到PHP
- 18. 将数据传递到PHP
- 19. 将消息从NetBeans插件传递到C#WinForms应用程序
- 20. 如何将数据从java程序传递到javafx应用程序图表?
- 21. 将凭据传递从桌面应用程序到Django应用程序
- 22. 如何将php表单数据传递给angular2应用程序?
- 23. 将数据从JavaScript传递到C#
- 24. 没有安装任何应用程序将数据从应用程序传递到应用程序
- 25. C#应用程序将数据传递给Windows服务
- 26. 安装后将数据传递到我的应用程序
- 27. 将OpenCV轮廓从JNI C++函数传递到Java中的Android
- 28. 将POST数据从Objective-C传递到PHP
- 29. 从应用程序传输数据到应用程序?
- 30. 如何将文件数据从C#控制台应用程序传递给WebApi?
最好的解决方案取决于两个程序是否运行在同一台机器上。 – 2014-10-11 09:13:40
但是无论如何,如果你使用套接字,那么问题是什么?你已经建立了完全灵活的沟通形式,不是吗? – 2014-10-11 09:14:53
我是新的套接字通信..是一种使用套接字传回价值的PHP .. ..?两者都在同一台机器上运行。 @ChristianHackl – JHJL 2014-10-11 09:16:53