我正在开发一个新的应用程序,虽然我的背景主要是基于Mac/iOS的,但我需要开发一个Windows应用程序来参与他们的设想杯。
该项目包括客户端之间通过套接字连接(到服务器,而不是临时连接)之间的通信,我需要Mac和Windows客户端能够相互通信。我也不想写两次这个网络代码,只需在两个平台上编写不同的本机UI代码。这使得联网变得更容易(我确信两个不同的平台不会以不同的方式与服务器交互),并允许在这两个平台上使用原生UI。
是C++完成这项任务的最佳语言吗?标准库在两个平台上都是相同的吗?我知道我将不得不使用微软的VisualC++库,因为似乎很难利用来自C#的C++代码;这是真的吗?
我以前从未真正编写过跨平台应用程序,尤其是处理跨平台间网络的应用程序。
发布于 2011-12-05 18:10:07
如果要使用C++,我在上面第二个"the_mandrill“,强烈建议您在Boost中查看ASIO --这是编写代码一次并支持这两个平台的一个很好的方法。
至于C++是否是正确的语言,则是比较主观的。我个人的感觉是,如果你需要问,不同意,这不是最好的方法。
选择C++实现网络代码的原因如下:
避免C++的原因是:
你可能考虑的替代办法包括:
您还问:“我知道我将不得不使用微软的VisualC++库,因为似乎很难利用来自C#的C++代码;这是真的吗?”
您可以完全避免VisualC++库--要么使用C++以外的语言进行开发,要么使用备用C++编译器--例如Cygwin或MinGW提供G++.不过,我建议使用VisualC++为Windows构建C和C++代码。
使用来自C++的C#代码并不难--尽管我并不推荐它作为一种方法。可能太复杂了。Visual C++可以(可选)从C++源代码编译“托管代码”(需要掌握一些语法扩展,而且使用Mono而不是VisualC++的互操作语法略有不同,但这些并不是IMHO的主要问题)。这些CLR对象直接与C#对象交互,并且可以在没有问题的情况下链接到一个单独的程序集中。使用Pinvoke访问本机DLL也很容易(本机架构可能使用C++编写)。然而,所有这些都与此无关,因为.Net框架很好地支持system.net中的低级别网络(类似于Winsock2提供的支持)--这为类似设施提供了一个方便的C#接口,并且可能会提供一个更方便的API,如果使用C#(或VB.Net或任何其他CLR语言)来开发。
发布于 2011-12-05 18:09:27
我建议你看看Qt。IMO是进行跨平台应用的最好的C++库之一。与Boost相比,Qt的好处是Qt甚至有GUI类。
发布于 2011-12-05 17:33:54
最好的语言是非常主观的,但是如果您想要具有有用的抽象和C风格语法的可移植快速代码,那么C++是一个不错的选择。请注意,如果您不知道任何C++已经有一个陡峭的学习曲线。
ISO标准定义的库在每个平台上都是相同的,但是它的实现要少一些或更兼容。也就是说,gcc、clang和MSVC(post .net)都很好地实现了C++98。只要您不使用编译器特定的扩展。
我强烈建议您使用boost asio (和一般的boost库)来建立网络,它使用了非常高效的proactor设计模式。然而,这确实需要一些时间,让你的头绕过它。
asio.html
坚持使用标准库和boost,在大多数情况下,跨平台问题并不是主要关注的问题。
最后,我将避免使用C++11特性编写跨平台代码,因为MSVC、GCC和Clang都实现了标准的不同部分。
https://stackoverflow.com/questions/8389310
复制相似问题