2009-09-25 34 views
1

問題是,它是C++。我創建它們的方式使得它們始終通過終端/控制檯窗口運行,並等待用戶輸入,或者只是簡單地輸入樣本並以此運行。輸出也一直到終端屏幕或有時到達文件。我不太確定我如何才能把所有這些都集成到一個網站上,同時保留源代碼,如果可能的話。我想我想要的目標是讓我使用任何網站的行爲就像一個終端窗口,它將接受用戶輸入,然後發送它來運行有問題的C++程序並返回輸出(不管它可能是什麼) ,只需對源代碼進行最小限度的修改即可。要麼這樣,要麼建立一個更自動化的頁面,用戶只需點擊'Go'並且程序將使用一個示例輸入來運行。我想通過網站炫耀我的C++項目

當談到網絡時,我認爲自己介於HTML,CSS,PHP & MySQL以及Javascript初學者,所以如果這可以使用這些語言來完成,那就太棒了。如果不是,不要害怕讓我看到新的東西。

+0

另外我遇到了另一個問題。大多數這些程序都被提交給一個自動化系統,該系統爲每個程序提供自動化樣本輸入,運行它,然後將其與預設輸出進行比較。我相信這是一個ACM網站,不記得了。無論如何,當我嘗試直接從Windows資源管理器運行.exe文件時,控制檯彈出,程序運行,然後控制檯關閉。該程序運行得非常快,我不明白會發生什麼。其他首先打開CMD並通過該程序運行程序,我不知道如何保持.exe的速度非常快。想法? – 2009-09-25 23:11:19

+0

在Windows上使用例如:: system(「pause」)在main的結尾。提交到網站之前一定要將其刪除。 – 2009-09-25 23:23:44

+0

這個簡單的模型,輸入 - >處理 - >輸出,是最容易適應CGI處理的,兩端都有大量的膠水代碼。 (我會建議使用'getch()'或其他東西,而不是僅僅爲了運行'暫停')。) – gavinb 2009-09-25 23:37:51

回答

3

將最簡單的互動模式引入網絡是一個應用程序,它將其輸入前置並在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來改進它(並相應地更改內容類型)。

還有其他更復雜的解決方案,包括整個web框架,如Wt。但是,這將涉及到您的應用程序的相當大的變化,你說你希望避免。

+1

我剛剛在這裏發現了一個很好的CGI教程,鏈接到C++ CGI圖書館:http://www.geekdaily.net/2007/08/06/ca-basic-cgi-tutorial/ – gavinb 2009-09-25 23:35:11

1

有你使用CGI認爲......其19世紀的技術,它可以讓網絡服務器執行用C/C++程序運行並生成輸出

我不很瞭解......但我用了一些學校項目

+0

也許你的意思是20世紀?:) – 2009-09-25 23:03:24

+0

19世紀?呃... – Mike 2009-09-25 23:05:06

+2

我很確定他的意思是19。 – NTDLS 2009-09-25 23:11:09

0

用Screencasts展示一切。我使用Camtasia工作室,但有一大堆那裏:http://en.wikipedia.org/wiki/Screencast

Camtasia甚至會生成您需要上傳到您的Web服務器的所有HTML和Flash。買一個漂亮的USB麥克風,寫一個你要說的和演示的劇本。

0

炫耀你的項目的目的是什麼?你想打動你的朋友或僱主嗎?

它似乎並不通過web界面模仿或端口的C++控制檯應用程序是可行的。 我想你可以在服務器端腳本和C++二進制文件之間編寫一個橋樑,它將用戶輸入傳遞給你的應用程序,然後通過web界面返回結果。請記住,這對你來說是一項艱鉅的任務。

紅寶石在他們的網站上的編譯器,demonstrates可以做到這一點。

但是在網絡上沒有人會預料到在Web瀏覽器中運行的C++應用程序。此外,我認爲任何對運行C++應用程序感興趣的人都會完全適合下載您製作並運行它的C++二進制文件(除了安全風險),但是當您考慮它時,我們會下載應用程序並始終運行它們,同時相信來源。

我有一個投資組合的網站,我爲letting employers see my work而創建的。看一看,它會給你一個另一種你可以做事情的想法。

基本上我提供下載,視頻,截圖和鏈接的二進制文件。如果用戶沒有時間(或適當的計算機)運行我的項目,用戶可以快速查看我的工作。

好運

0

我有這個沒有經驗(不是聽取BART一個人談論實現所有用C自己的服務器端代碼等),但你可能會考慮看看夜風(http://www.swig.org/)。它允許您打包C++,以便在使用PHP等語言時可以訪問C++代碼。