Qt网络编程入门

Getting started with network programming in Qt

我刚开始在我的大学做一份暑期工作,在实验室工作,在没有太多指导的情况下,我遇到了一个相当大、模糊的问题,所以我希望有人能帮助我指明正确的方向.

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

教授希望它是安全的,延迟尽可能低,并且程序在会话完成后记录数据。

到目前为止,我一直在考虑(没有太多经验)在 Qt 中构建一个 client/server 模型,但我不确定从哪里开始。

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

Q2: 对于安全和一般的网络编程,从一开始我应该注意哪些概念? (我听说过关于 Beej's Guide, and books by W. Richard Stevens 的好消息)

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

关于第二个问题,你要仔细分析你要传递什么样的信息,交流的特点是什么。 如果你打算让它像一个玩家实时互动的视频游戏,你一定会使用 UDP 套接字(虽然一些数据可能会丢失,但它允许 "real time" 通信)。控制消息可以通过 TCP 传播,因为延迟的影响不会那么严重,并且您希望它们能够可靠地发送,因此如果是这种情况,请考虑使用两个套接字(TCP 和 UDP),并将它们用于它们的目的。

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

这是我的 2 美分。

祝你的项目好运,我相信这将是你学习并将一些理论付诸实践的好机会。