目前我正在編寫一個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. 通過PHP將數據從MySQL傳遞到C#應用程序
- 2. 將數據從iPhone應用程序傳遞到PHP文件
- 3. 將數據從ios應用程序傳遞到C#web服務
- 4. 將數據從C#傳遞到PHP
- 5. 將數據從C++程序傳遞到linux上的python程序
- 6. PHP - 將數據過濾並傳遞到我的應用程序
- 7. 傳遞數據從PHP到JavaScript混合應用程序
- 8. C#程序將數據傳遞給第三個應用程序
- 9. 將數據從32位應用程序傳遞到64位應用程序?
- 10. WIndows Phone 8.1 WNS將數據從Toast傳遞到應用程序
- 11. 將數據從Android Browser傳遞到外部應用程序
- 12. Flex:將數據從preloader傳遞到應用程序?
- 13. 將數據從MongoDB傳遞到我的前端應用程序
- 14. 將數據從Facebook傳遞到iFrame應用程序
- 15. Android將數據從應用程序傳遞到瀏覽器
- 16. 將配置數據從webview傳遞到應用程序
- 17. 將數據從應用程序傳遞到活動
- 18. 如何將數據從網頁傳遞到應用程序?
- 19. 將數據從Nginx傳遞到Sinatra應用程序
- 20. 從Android應用程序傳遞數據到Java程序
- 21. 將數據從Rails 3應用程序傳輸到C#桌面應用程序
- 22. 將數據從控制器傳遞到PHP MVC應用程序中的視圖
- 23. 將數據從android應用程序傳遞到php文件的錯誤
- 24. 將數據從android應用程序傳遞到php服務器的錯誤
- 25. 將數據從php文件傳輸到Android應用程序
- 26. 將內存中的數據從PHP傳遞到.Net程序
- 27. 將一個值從PHP應用程序傳遞到Angular4應用程序
- 28. 如何將數據從非託管應用程序傳遞到C#COM DLL
- 29. 將許多數據從Python傳遞到C程序
- 30. 將字符串從JAVA應用程序傳遞到php變量
最好的解決方案取決於兩個程序是否運行在同一臺機器上。 – 2014-10-11 09:13:40
但是無論如何,如果你使用套接字,那麼問題是什麼?你已經建立了完全靈活的溝通形式,不是嗎? – 2014-10-11 09:14:53
我是新的套接字通信..是一種使用套接字傳回價值的PHP .. ..?兩者都在同一臺機器上運行。 @ChristianHackl – JHJL 2014-10-11 09:16:53