2017-04-21 34 views
3

我認爲這是更好的,如果我解釋的情況,所以這似乎不是一個太神祕的問題。我想爲一個項目發佈一些入門代碼,我想讓我的一些學生開始工作。該項目涉及通過一些互聯網網頁抓取,因此,我想爲他們提供一個URLStream類,它將下載輸入url的html並將其作爲字符串返回給他們。跨平臺的C + +網絡(沒有大型圖書館)

問題是,我似乎無法找到一種以跨平臺(學生擁有mac/windows/linux計算機)的方式處理網絡的特別好方法。我知道像Boost asio和libCurl這樣的圖書館,但使用這些圖書館的問題是我無法強制所有學生下載它們。所以我的問題是雙重的:

  1. 有沒有什麼好方法可以爲他們提供這個跨平臺的網絡代碼?
  2. 如果圖書館是這樣做的唯一方法,是否有任何方法將圖書館附加到初學者項目,以便學生不必下載它?我知道這可能是一個愚蠢的問題,但我似乎無法確定這是否可能。
+0

什麼是運動的目標是什麼?爲學生學習低級網絡編程?瞭解HTTP?或者是其他東西?除非目標是讓學生(或*你*)學習低級網絡編程,否則我強烈建議你使用第三方庫(如libcurl)。這會讓你和你的學生變得更容易。而且你的維護要少得多,對你的支持和問題要少得多。 –

+0

@Someprogrammerdude練習的目標與網絡無關。他們最多都在用html搞亂。我只是希望他們能夠專注於作業,而不必擔心網絡問題。我非常喜歡使用第三方庫,但這會讓我不得不告訴他們下載並設置庫(對吧?) - 這是我試圖避免的,因爲他們不必擔心這些細節。 libcurl可以附加到初學者項目,所以他們不必下載它? – gowrath

+0

如果您有權訪問大多數學生可以訪問的系統(Windows系統,macOS系統和Linux系統),那麼您總是可以預建靜態庫,例如, libcurl與您的初學者代碼一起分發,並提供有關如何在構建時使用該庫的簡單說明。 –

回答

1

Berkeley sockets API是最常見的底層套接字API。它支持所有的POSIX平臺,這意味着Linux和MacOS都會擁有它。

即使是Windows也有它,但是稍微有點扭曲,因爲套接字不是像POSIX系統上的描述符。

直接使用套接字將導致更多的鍋爐代碼,但它可以用來製作一個簡單的HTTP客戶端,它只支持簡單的GET請求。

有很多關於使用套接字的教程和參考。 Beej's Guide to Network Programming似乎是一個受歡迎的教程,它應該有關於Windows所需的調整的說明。

1

Boost.Asio真的不適合您的需求,因爲它涉及巨大的Boost並構建至少一些非標頭庫。你仍然可以考慮Asio lib,可以使用W/O Boost,並且是僅包含頭文件的庫,對於你和你的學生來說,這樣做更簡單。因爲它可能是最流行的和現代化的網絡C++庫,這個練習可以爲學生提供一些有用的經驗。 Asio的例子也有a simple HTTP client

作爲一個方面說明,你是否被綁定到C++的這項任務? Python或類似的語言可以更簡單地提供開箱即用的網絡。

+0

是的,我是;這是一門學習C++的課程! :) – gowrath

+0

那麼這項任務的主題是什麼? *他們最多隻會搞亂HTML *可能只是給他們離線HTML並將其命名完成? –

+0

他們正在編寫一個頁面排名類型的程序,所以需要能夠遵循任意鏈接。 – gowrath

0

跨平臺的C++庫,用於網絡編程

ASIO是一個跨平臺的C++庫,網絡編程,提供 開發與使用現代C++ 方法一致的異步I/O模型。它最近被接受進入Boost。

我從Synaptic中的信息窗口中複製了它。如果你正在使用Linux,安裝庫(和它的文件),因此:

命令和apt-get安裝libasio-dev的libasio-doc的