【问题标题】:I want to show off my C++ projects through a website我想通过网站展示我的 C++ 项目
【发布时间】:2009-09-25 22:54:44
【问题描述】:

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

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

【问题讨论】:

  • 我还遇到了另一个问题。这些程序中的大多数都被提交给一个自动化系统,该系统为每个程序提供自动化样本输入,运行它,然后将其与预设输出进行比较。我相信这是一个 ACM 网站,不记得了。无论如何,当我尝试直接从 Windows 资源管理器中运行 .exe 文件时,控制台会弹出,程序运行,然后控制台关闭。该程序运行得如此之快,我看不到会发生什么。其他先打开 CMD 并通过它运行程序,我不知道如何防止 .exe 如此快速地运行。想法?
  • 在 Windows 上使用例如 ::system("pause") 在 main 的末尾。请务必在提交到网站之前将其删除。
  • 这个简单的模型,输入 -> 过程 -> 输出,最容易适应 CGI 处理,两端都有大量的胶水代码。 (我建议使用getch() 或其他东西,而不是仅仅为了运行pause 而进行炮击。)
  • 在最后暂停输出的一个狡猾的技巧是放入一个 scanf()。它有效

标签: c++ terminal integrate


【解决方案1】:

最简单的网络交互模型是一个应用程序,它预先输入并在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++(Google 搜索显示很多)的 CGI 库绝对值得。查询数据可以通过:

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

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

还有其他更复杂的解决方案,包括完整的 Web 框架,例如 Wt。但这会涉及对您的应用程序进行相当大的更改,而您表示希望避免这种更改。

【讨论】:

【解决方案2】:

几乎跑题了,但你可能想看看Wt

【讨论】:

    【解决方案3】:

    您是否考虑过使用 cgi ......它是 19 世纪的技术,它可以让网络服务器执行用 C/C++ 编写的程序来运行并生成输出

    我对此了解不多......但我将它用于一些学校项目

    【讨论】:

    • 也许你的意思是20世纪? :)
    • 我很确定他的意思是 19 号。
    • 据我所知,CGI 是在 20 世纪 90 年代开发的 :)
    • 我的意思是 19 世纪......在计算机发明之前的某个地方 ;-)
    【解决方案4】:

    使用截屏视频展示一切。我使用 Camtasia Studio,但那里有很多:http://en.wikipedia.org/wiki/Screencast

    Camtasia 甚至会生成您需要上传到网络服务器的所有 HTML 和 Flash。买一个漂亮的 USB 麦克风,然后写一个你要说什么和展示什么的脚本。

    【讨论】:

      【解决方案5】:

      炫耀你的项目的目的是什么?您想给您的朋友或雇主留下深刻印象吗?

      通过 Web 界面模拟或移植 C++ 控制台应用程序似乎不可行。 我想您可以在服务器端脚本和您的 C++ 二进制文件之间编写一座桥梁,将用户输入传递给您的应用程序,然后通过 Web 界面返回结果。请记住,这对您来说将是一项艰巨的任务。

      Ruby 在他们的网站上有一个编译器,demonstrates 可以做到这一点。

      但是,网络上没有人会期望在网络浏览器中运行您的 C++ 应用程序。此外,我认为任何对运行 C++ 应用程序感兴趣的人都会非常乐意下载您制作的 C++ 二进制文件并运行它(除了安全风险),但是当您考虑它时,我们会下载应用程序并一直运行它们,同时信任来源。

      我有一个为letting employers see my work 创建的投资组合网站。看一看,它会让您了解另一种做事方式。

      基本上,我提供二进制文件供下载、视频、屏幕截图和链接。如果用户没有时间(或合适的计算机)来运行我的项目,他们可以使用这些东西快速查看我的工作。

      祝你好运

      【讨论】:

        【解决方案6】:

        我没有这方面的经验(除了在 BART 上听到一个人谈论用 C 实现他的服务器端代码),但你可以考虑看看 SWIG (http://www.swig.org/)。它允许您包装 C++,以便在使用 PHP 等语言时访问 C++ 代码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-15
          • 2018-12-14
          • 1970-01-01
          • 2015-03-05
          • 2019-12-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多