Qt中具有不同客户端的服务器

Qt中具有不同客户端的服务器,qt,Qt,我需要创建一个应用程序: 有一台服务器 客户端连接到服务器并发送8个long(来自8个传感器的数据:雨水、空气湿度、风速…)1个传感器数据/long(传感器数据从自定义USB设备获取) 用户客户端。最终用户运行此类型的客户端以连接到服务器,以便从传感器检索数据 我以前使用过Qt,只使用一种类型的客户机创建客户机-服务器应用程序。我也设法创建了这个应用程序,只是规模较小(使用了5个字,客户端同时连接到服务器)。我使用了Qt网络示例fortune线程服务器和阻塞fortune客户端示例 我如何识

我需要创建一个应用程序:

  • 有一台服务器

  • 客户端连接到服务器并发送8个long(来自8个传感器的数据:雨水、空气湿度、风速…)1个传感器数据/long(传感器数据从自定义USB设备获取)

  • 用户客户端。最终用户运行此类型的客户端以连接到服务器,以便从传感器检索数据

我以前使用过Qt,只使用一种类型的客户机创建客户机-服务器应用程序。我也设法创建了这个应用程序,只是规模较小(使用了5个字,客户端同时连接到服务器)。我使用了Qt网络示例fortune线程服务器和阻塞fortune客户端示例


我如何识别哪个客户是哪个?(因为他们每次连接到互联网时都有不同的ip)。在我的小规模应用程序中,我创建了某种协议,但必须有一种更有效的方法来实现这一点。

我假设您希望识别客户机类型(“传感器客户机”与“用户客户机”),而不是单个客户机实例

要做到这一点,最简单的方法是实现问题中提到的协议。对于您的用例,这可能非常简单:

  • 让“传感器客户端”发送一个“写入”命令(一个像“w”这样的字符就足够了),后跟传感器数据。然后,服务器接收到“w”命令,并知道他需要从客户端读取传感器数据
  • 让“用户客户端”发送“读取”命令(例如字符“r”)。当服务器收到“r”命令时,它知道它需要向客户端发送数据
如果出于任何原因,您甚至不想实现这样一个简单的协议,那么还可以设置两个单独的QTcpServer实例,它们在不同的端口侦听,比如8192和8193。然后,“传感器客户端”将连接到端口8192,服务器通过端口号知道客户端将发送数据。您的“用户客户端”将连接到端口8193,服务器知道客户端需要数据并将发送所需数据


在任何情况下,您都应该知道不涉及任何身份验证和授权,任何知道简单协议和/或端口号的客户端都可以发送和接收数据。

我假设您想要识别客户端类型(“传感器客户端”与“用户客户端”),而不是单个客户端实例

要做到这一点,最简单的方法是实现问题中提到的协议。对于您的用例,这可能非常简单:

  • 让“传感器客户端”发送一个“写入”命令(一个像“w”这样的字符就足够了),后跟传感器数据。然后,服务器接收到“w”命令,并知道他需要从客户端读取传感器数据
  • 让“用户客户端”发送“读取”命令(例如字符“r”)。当服务器收到“r”命令时,它知道它需要向客户端发送数据
如果出于任何原因,您甚至不想实现这样一个简单的协议,那么还可以设置两个单独的QTcpServer实例,它们在不同的端口侦听,比如8192和8193。然后,“传感器客户端”将连接到端口8192,服务器通过端口号知道客户端将发送数据。您的“用户客户端”将连接到端口8193,服务器知道客户端需要数据并将发送所需数据


在任何情况下,您都应该知道不涉及任何身份验证和授权,任何知道简单协议和/或端口号的客户端都可以发送和接收数据。

要识别客户端,您必须使用某种客户端ID。通常是某种哈希(MD5摘要、UUID或GUID)用作客户端ID。当客户端连接到服务器时,必须将此客户端ID从客户端发送到服务器

客户端被识别和接受后会发生什么,取决于连接类型(协议)。如果使用有状态协议,则只要客户端使用相同的连接,该连接就会保持打开状态,因此无需重新标识客户端。如果使用无状态连接(例如HTTP),则每次客户端需要向服务器发送数据(即文档、页面等)时,都必须从客户端向服务器重新发送相同的ID

处理这样的客户机/服务器体系结构的一种更简单、更有效的方法是使用某种现有的、经过验证的服务器。例如,您可以使用像Wt这样的RESTful web服务器(http://www.webtoolkit.eu/wt/blog),因为你已经使用C++了。 更好的是,我会使用基于Ruby或Python的RESTful web服务框架,如:

或者新的Ruby on Rails API:


用Ruby或Python开发服务器更快更简单。客户机可以以任何方式开发(C++与Qt、web浏览器中的Javascript和许多其他方式)

要识别客户机,必须使用某种客户机ID。通常,使用某种哈希(MD5摘要、UUID或GUID)用作客户端ID。当客户端连接到服务器时,必须将此客户端ID从客户端发送到服务器

客户端被识别和接受后会发生什么,取决于连接类型(协议)。如果使用有状态协议,则只要客户端使用相同的连接,该连接就会保持打开状态,因此无需重新标识客户端。如果使用无状态连接(例如HTTP),则每次客户端需要向服务器发送数据(即文档、页面等)时,都必须从客户端向服务器重新发送相同的ID

处理这样的客户机/服务器体系结构的一种更简单、更有效的方法是使用某种现有的、经过验证的服务器。例如,您可以使用R