c++ - 我想通过网站展示我的 C++ 项目

标签 c++ terminal integrate

问题是,它是 C++。我创建它们的方式使得它们始终通过终端/控制台窗口运行并等待用户输入,或者简单地获取样本输入并使用它运行。输出也一直是终端屏幕或有时是文件。如果可能的话,我不太确定如何在保持源代码不变的情况下将所有这些内容与网站集成。我想我的目标是让我使用的任何网站都像终端窗口一样接受用户输入,然后将其发送以运行有问题的 C++ 程序并返回输出(无论它可能是什么) ,所有这些都对源代码进行了最少的修改。或者设置一个更加自动化的页面,用户只需点击“开始”,程序就会使用示例输入运行。

在网络方面,我认为自己是 HTML、CSS、PHP 和 MySQL 的中级水平,并且是 Javascript 的初学者,所以如果可以使用这些语言来完成,那就太棒了。如果没有,请不要害怕向我展示一些新东西。

最佳答案

引入 Web 的最简单的交互模型是一个应用程序,它预先接受输入并在 stdout 上产生输出。在这种情况下,正如未知发布者所提到的,您可以使用 CGI .但由于 CGI 的性质,只有在一页中从用户收集所有信息、发送到应用程序并在一页中返回结果的情况下,这才有效(在最简单的意义上)。这是因为每次使用 CGI 调用页面都会产生一个新的独立进程来处理请求。 (现在有其他更有效的解决方案,例如 FastCGI,它保留了一个进程池。)如果您的应用程序是交互式的,因为它收集一些信息,显示一些结果,打印一些选项,收集更多的用户输入,然后产生更多的结果,就需要对其进行调整。

这是用 C++ 编写的最简单的 CGI 程序:

#include <iostream>
int main(int argc, char* argv[])
{
    std::cout << "Content-type: text/plain\n" << std::endl;
    std::cout << "Hello, CGI World!" << std::endl;
}

它所做的只是返回内容类型,后跟一个空行,然后是带有通常无聊问候语的实际内容。

要接受用户输入,您可以用 HTML 编写一个表单,POST 目标就是您的应用程序。它将以通常的 HTTP 样式传递一个包含请求参数的字符串:

foo.cgi?QTY=123&N=41&DESC=Simple+Junk

然后您需要解析查询字符串(通过 QUERY_STRING 环境变量传递给程序)以从表单收集输入字段以传递给您的应用程序。当心,因为解析参数字符串是大量安全漏洞的来源。为 C++ 寻找一个 CGI 库(Google 搜索显示很多)来为您进行解析绝对是值得的。查询数据可以通过以下方式获取:

const char* data = getenv("QUERY_STRING");

因此,至少,您需要更改您的应用程序以接受来自 name=value 对的查询字符串的输入。如果您不想,您甚至不需要生成 HTML;只需将内容类型返回为 text/plain 即可。然后您可以稍后使用 HTML 对其进行改进(并相应地更改内容类型)。

还有其他更复杂的解决方案,包括整个网络框架,例如 Wt .但这将涉及对您的应用进行大量更改,您曾说过您希望避免这种情况。

关于c++ - 我想通过网站展示我的 C++ 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1479886/

相关文章:

c++ - 我们可以为 mysql 数据库中的冲浪描述符指定什么类型

c++ - 来自 n3290 :Argument-dependent name lookup 的一个点

command-line - 终端错误 - 尝试任何命令时出现 "zsh: command not found"

terminal - 未找到 gcloud 命令 - 正在安装 Google Cloud SDK

c# - 在我的表单中显示另一个应用程序

php - 将网络系统与卡支付处理终端集成

c++ - int** 和 int[][] 类型有什么区别?

c++ - 打印最长的字符串重复 M 次

python - 在终端中终止 Python(control-C 仅打印 ^C)macOS 10.12

java - 将 C++ 库转换为 .so/.dll 共享库