2011-12-02 102 views
2

在服務器/客戶端環境,我需要通過HTTP協議發送純文本文件。C# - 發送一個文件通過HTTP

典型場景:
客戶端加入服務器,服務器發送一個字符串告訴客戶端URL以下載文本文件。網址是:

「IP:PORT /文件夾/文件夾/ file.txt的」(其中 'IP' 和 '端口' 是實際 IP的端口和IE:127.0.0.1:1234)

我需要的服務器,以允許對文件位置的連接,單獨文件的位置。 客戶端是封閉源代碼,所以我無法控制其代碼。它應該像HTTP服務器一樣工作,但僅限於該文件或至少子文件夾。您應該能夠將URL輸入瀏覽器地址並讀取文件的內容。

這樣做的最好方法是什麼?

+0

@Oded - 我不完全確定如何閱讀我有的代碼,但它使用'NetworkStream'和'StreamReader' /'StreamWriter'。我可以重寫整個事情,所以我知道發生了什麼。 –

回答

3

最簡單的方法是使用HttpListener類。

該手冊包含向您介紹如何設置監聽器和接收請求的例子,但它並不直接涉及如何檢查請求是什麼文件,以及如何到該文件反饋給客戶端。但是,兩者都很容易做,並且不會花費太多代碼。

+0

聽衆並不理想,因爲我不知道客戶端發送的內容是什麼。客戶端是封閉源代碼,所以我不確定它是如何格式化的。 –

+0

@ZionFox:等等,你說「像HTTP服務器一樣」對吧?這正是'HttpListener'所做的。如果您不確定客戶端發送了什麼,那麼您將如何能夠解析它? – Jon

+0

我不需要解析客戶端發送的內容,除了它的數據包,我已經整理出來了。 URL字符串被轉換爲字節數組,然後發送給客戶端,然後(我認爲)檢查'關鍵字'並相應地執行(下載文件的內容)。整個字節數組讀取爲「cfg = IP:PORT/folder/folder/file.txt」,所以它可能會查找'cfg ='並從後一個子字符串下載文件。 當客戶端連接時,它發送一個字符串,我解析並存儲在一個變量中,說我可以發送像上面這樣的特殊字符串。 –

1

您可以嘗試使用現有的網絡服務器一樣阿帕奇服務於這些文件。

此外,如果這是某種形式的學習鍛鍊。你可以實現你自己simple HTTP server in C#

+0

HTTP Web服務器是一個困難的選擇,因爲這個軟件可以使用的觀衆。我預測大多數用戶不會知道HTTP是什麼,更不用說設置一臺服務器來託管文件。 (我個人運行我自己的網絡服務器,有4個域名,所以對我來說這樣做不是問題,但其他人可能不會有這種奢侈品。) –

+0

我已經包含其他選項以及 –

+0

事實上,我我正在研究它,它似乎很可能工作。謝謝^^ –