跨平台C ++网络(没有大型库)

时间:2017-04-21 08:40:25

标签: c++ networking

我认为如果我解释这种情况会更好,所以这似乎不是一个神秘的问题。我想为我希望我的一些学生工作的项目发布一些入门代码。该项目涉及浏览一些互联网网页,因此,我想为他们提供一个URLStream类,它将下载输入网址的html并将其作为字符串返回给他们。

问题在于我似乎找不到一种特别好的方式来处理跨网络的交互方式(学生有mac / windows / linux机器)。我知道像Boost asio和libCurl这样的库,但使用这些库的问题是我无法强制所有学生下载它们。所以我的问题有两个:

  1. 有没有什么好方法可以为他们提供这种跨平台的网络代码?
  2. 如果图书馆是唯一的方法,有没有办法将图书馆附加到入门项目,以便学生不必下载?我知道这可能是一个愚蠢的问题,但我似乎无法知道这是否可行。

3 个答案:

答案 0 :(得分:2)

Berkeley sockets API是最常见的低级套接字API。所有POSIX平台都支持它,这意味着Linux和macOS都可以使用它。

即使是Windows也有它,但由于套接字不像POSIX系统那样具有描述符,因此略有不同。

直接使用套接字将导致更多的样板代码,但绝对可以使用它来创建一个仅支持简单if( logged.getRatedGamesId().contains(gameId)){ return "redirect:/users/" + logged.getId() + "/pastGames"; 请求的简单HTTP客户端。

有许多关于使用套接字的教程和参考资料。 Beej's Guide to Network Programming似乎是一个受欢迎的教程,应该记录Windows所需的调整。

答案 1 :(得分:1)

Boost.Asio实际上并不适合您的需求,因为它涉及巨大的Boost并且至少构建了一些非标头库。你仍然可以考虑Asio lib可以在没有Boost的情况下使用,而且只是标题库,这对你和你的学生来说更加麻烦。由于它可能是最流行和最现代的网络C ++库,这个练习可以为学生提供一些有用的经验。 Asio示例也有a simple HTTP client

作为旁注,你是否为这个作业绑定了C ++?在Python或类似语言中提供开箱即用的网络会更加简单。

答案 2 :(得分:0)

用于网络编程的跨平台C ++库

asio是一个用于网络编程的跨平台C ++库 具有使用现代C ++的一致异步I / O模型的开发人员 做法。它最近被Boost接受了。

我从Synaptic的信息窗口复制了它。如果您使用的是Linux,请安装库(及其文档):

sudo apt-get install libasio-dev libasio-doc