【问题标题】:Cross platform C++ UDP socket library跨平台 C++ UDP 套接字库
【发布时间】:2012-01-02 20:18:52
【问题描述】:

有人可以推荐一个免费的 C++ 开源库,我将使用它来使用 UDP 构建网络游戏。必须适用于 Windows/Linux/Mac。请尽量轻量化。

【问题讨论】:

  • 如果不需要静态链接,可以使用Qt。
  • 最轻量级的解决方案就是直接调用 BSD 风格的 C 套接字函数;它们已经在您提到的所有操作系统上可用,并且它们在每个操作系统上的工作99.9%相同(主要区别是您需要在使用它们之前调用 WSAStartup() ,仅在 Windows 版本中)。 UDP 套接字使用起来非常简单,C++ 包装器库并不能真正为您节省很多工作。
  • @Jeremy 我想避免任何 Windows 细节。我见过一些使用套接字的代码,其中有相当多的#ifdefs。
  • 我不认为你会避免 Windows 的细节,而是将它们从你的代码移到网络库的代码中。 FWIW,我在我的网络库中数不到十几个这样的#ifdef(我认为您不会认为“轻量级”,但 FWIW 就在这里:lcscanada.com/muscle

标签: c++ sockets network-programming


【解决方案1】:

SDL_Net 怎么样?不是真正的 C++,但它是轻量级且跨平台的。

【讨论】:

    【解决方案2】:

    http://enet.bespin.org/

    一个非常先进的基于 C UDP 的库,具有多路复用、可靠/不可靠/未排序/分段交付。跨平台。为已建立的开源游戏(Cube 2: Sauerbraten)使用和创建,如果您浏览它的邮件列表,您会发现它有时也用于商业游戏。

    【讨论】:

      【解决方案3】:

      我自己并没有在 C++ 中使用网络,但如果我必须进行网络,我会尝试 Boost asio

      【讨论】:

      • 如果 OP 是 Boost 的新手:整个发行版相当大(仅源代码约 100 MB),但 Asio 本身在 1.4.80 版本中占用约 2.22 MB。您可能需要添加一些依赖项,但它应该足够小。
      • 我没有使用过 Boost(但听到很多人提到它),而且 2.2 MB 令人望而却步。
      • ASIO 也作为独立库存在