Mat*_*gan 3 c++ windows macos networking cross-platform
我开始开发一个新的应用程序,虽然我的背景主要是基于 Mac/iOS,但我需要在 Windows 应用程序上工作才能参与他们的 Imagine cup。
这个项目包括客户端之间通过套接字连接(到服务器,而不是临时)的通信,我需要 Mac 和 Windows 客户端能够相互通信。我还希望不必两次编写此网络代码,而只需在两个平台上编写不同的本机 UI 代码。这使得网络更容易(我相信两个不同的平台不会以不同的方式与服务器交互)并允许在两个平台上使用本机 UI。
C++ 是完成这项任务的最佳语言吗?两个平台上的标准库是否相同?我知道我将不得不使用 Microsoft 的 Visual C++ 库,因为从 C# 中使用 C++ 代码似乎很困难;这是真的?
我以前从未真正编写过跨平台应用程序,尤其是处理平台之间网络的应用程序。
如果您打算使用 C++,我强烈建议您查看 Boost 中的 ASIO,我在上面的第二个“the_mandrill” - 这是编写一次代码并支持两个平台的好方法。
至于 C++ 是否是正确的语言,则更为主观。我的个人感觉是,如果您需要询问,可能不是最好的方法。
选择C++来实现网络代码的原因是:
避免使用 C++ 的原因是:
您可能考虑的替代方案包括:
您还问:“我知道我必须使用 Microsoft 的 Visual C++ 库,因为使用 C# 中的 C++ 代码似乎很难;这是真的吗? ”
您可以完全避免使用 Visual C++ 库——通过使用 C++ 以外的语言进行开发,或者使用替代的 C++ 编译器——例如 Cygwin 或 MinGW 提供 G++...尽管我建议使用 Visual C++ 来构建 C 和 C++ 代码视窗。
使用 C# 中的 C++ 代码并不难 - 尽管我不推荐它作为一种方法......它可能过于复杂。Visual C++ 可以(可选)从 C++ 源代码编译“托管代码”(有一些语法扩展需要掌握,使用 Mono 而不是 Visual C++ 的互操作语法略有不同,但恕我直言,这些不是主要问题。)这些 CLR 对象直接与 C# 对象交互,并且可以毫无问题地链接到一个程序集中。使用 Pinvoke 访问本机 DLL(对于本机体系结构可能使用 C++ 编写)也很容易。然而,所有这些都有些无关紧要,因为 .Net 框架对 system.net 中的低级网络(类似于 Winsock[2] 提供的网络)有很好的支持——这为类似设施提供了一个方便的面向 C# 的接口,