在Qt中开始使用网络编程

时间:2015-05-20 18:04:00

标签: c++ qt network-programming boost-asio

我刚开始在我的大学做一个暑期工作,在实验室里工作,而且我在没有太多指导的情况下得到了一个相当大的,模糊的问题,所以我希望有人可以帮我指出正确的方向。 / p>

基本上,这是一个使用VTK(可视化工具包)在Qt中构建的三维世界,用于治疗和康复,我的任务是找到一种方法来联网两个或多个程序实例,以便用户可以共享三维环境(基本上是一个联网的视频游戏)。

教授希望它安全,延迟尽可能低,以及程序在会话结束后记录数据。

到目前为止,我一直在思考(没有太多经验)使用Qt构建的客户端/服务器模型,但我不知道从哪里开始。

Q1: 我应该使用Boost.asio或Qt库进行联网吗?

Q2: 从安全性和网络编程开始,我是否应该注意任何概念? (我听说过有关Beej's指南和W. Richard Stevens

的书籍的好消息

1 个答案:

答案 0 :(得分:0)

尝试回答您的第一个问题,这取决于您定位的平台(Windows,Linux,OSX ......)。您可以使用本机OS套接字api(bsd套接字或winsock),但Qt为这些提供了非常好的抽象,所以为了简单起见,我会坚持使用它。我不熟悉boost.asio,但我很确定Qt可以为您提供所有您需要的,无视您打算瞄准的平台。

关于第二个问题,您必须仔细分析您想要传输的信息类型以及交换的特征。 如果你打算让它像一个玩家实时互动的视频游戏,你必然会使用UDP套接字(虽然有些数据可能会丢失,但它允许实时"通信)。控制消息可以通过TCP传播,因为延迟的影响不是很重要,你希望它们可靠地发送,所以考虑有两个套接字(TCP和UDP),如果是这样,并使用它们为了他们的目的。

您链接的那些资源非常丰富,但假设您了解TCP和UDP及其功能,我建议您提高您的多线程技能。 Qt为您提供了良好的基础架构,但是诸如异步I / O(如何实现可选套接字)之类的主题可以帮助您创建更好的设计,从而消除额外线程(特别是用于读取)的大量开销。

这是我的2美分。

祝你的项目好运,我相信这将是你学习和实践理论的好机会。