【问题标题】:How can I get started with cross platform network programming?如何开始使用跨平台网络编程?
【发布时间】:2011-10-17 19:37:14
【问题描述】:

我正在考虑购买 this book 以了解有关 C/C++ 网络编程的更多信息:

我只是想知道是否/我需要一本与 Windows 等效的书(我确实计划在两个操作系统上编写代码)。我不确定 BSD sockets the windows 的演变有何不同。

我主要是为了最终编写将在计算机之间传输数据的代码。

【问题讨论】:

  • 首先学习如何在 *nix 中进行操作是明智的。首先学习如何在 Windows 中进行操作会伤脑筋。
  • 虽然我自己还没有使用过,但如果你正在研究 C++ 网络编程,你可能想看看跨平台的 Boost.ASIO 库。然后告诉我情况如何。 :) boost.org/doc/libs/1_47_0/doc/html/boost_asio/tutorial.html

标签: c++ c linux unix tcp


【解决方案1】:
【解决方案2】:

两者都做了,我肯定会从 BSD 版本开始。您不仅会在这两个平台(和其他平台)上学习到有用的东西,而且您会更好地了解底层的实际情况。

我认为你需要问自己的问题是:

  • 您打算多久将 Windows 添加到您的网络编程库中,并且
  • 您是否希望您的代码跨平台

如果您希望您的代码是跨平台的,我会考虑使用 Boost 或其他一些跨平台网络库来帮助您快速实现目标。如果您只是想开始学习一般的网络编程,然后专门将 Windows 网络编程添加到您的技能组中,我会按照您的计划从 BSD API 开始,然后获取专门针对 Windows 执行此操作的资源你准备好了。当我从 Linux 迁移到 Windows 时,我发现花额外的时间来学习 Windows 的做事方式是值得的。

【讨论】:

    【解决方案3】:

    即使您可以使用 Windows API 进行套接字编程,我还是建议您学习 BSD sockets API(或 POSIX 套接字 API)并在 Windows Linux 中都使用它。

    Windows 对 BSD 套接字 API 有很好的支持。

    您将从单个代码库中受益匪浅,而不是编写两次相同的功能。此外,BSD/POSIX API 也可用于许多其他 UNIX 风格(MAC OS X、HP/UP、AI/X、BSD,应有尽有)。

    【讨论】:

      【解决方案4】:

      对于简单的应用程序,BSD 套接字可以在 Windows 中正常工作。但是对于花里胡哨的东西,我真的建议阅读“原生”winsock。异步套接字在 GUI 应用程序中非常好,如果你想要高速性能,重叠 I/O 只是蜜蜂的膝盖,而不必处理线程(如果你愿意,你可以,但 Windows 会为你做)。

      This 是一本好书。

      【讨论】:

      • 这里有很多意见。有很多高质量的生产代码在 select() 和 poll() 上运行。
      • 好吧,如果您要处理许多同时连接,那么使用完成端口的重叠 I/O 通常在开发和性能方面都更快。您可以轻松地为超过 64 个连接提供服务(这是 winsock 中 select() 的默认限制)。此外,使用winsock,如果您必须等待其他I/O 和各种同步对象,它会变得不那么麻烦。使用 BSD 套接字功能更难破解。我没有说使用select()poll() 没有任何高质量的生产代码。
      【解决方案5】:

      Network Programming for MS Windows。我还没有读过这篇文章,但肯定会读,因为它看起来很有前途。

      【讨论】:

      • 它是很久以前出版的,甚至亚马逊上的 2002 cmets 都说有很多错误:s
      • @Paul 如果不彻底阅读它,我不能肯定地说,但我目前正在编写一个网络服务器,所以我只是浏览了这本书,它给了我一些有用的线索。而 2002 年就在不久前,主要原则依然存在。
      【解决方案6】:

      不要花钱 - 我个人还没有找到比 Beej 更好的网络指南。 http://beej.us/guide/bgnet/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-12
        • 2012-02-03
        • 2021-07-21
        • 2011-01-13
        • 1970-01-01
        • 2013-04-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多