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

时间:2012-11-26 13:40:08

标签: qt

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

  • 有一台服务器

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

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

之前我使用过Qt,只使用一种类型的客户端创建客户端 - 服务器应用程序。我设法创建了这个应用程序,只是规模较小(使用5个字,客户端同时连接到服务器)。我使用了Qt网络示例财富线程服务器和http://goo.gl/srypT并阻止了财富客户端示例。

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

2 个答案:

答案 0 :(得分:1)

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

执行此操作的直接方法是实现协议,如问题中所述。对于您的用例,这可能非常简单:

  • 让“传感器客户端”发送“写入”命令(一个字符,如“w”就足够了),然后是传感器数据。然后,服务器接收“w”命令并知道他需要从客户端读取传感器数据。
  • 让“用户客户端”发送“读取”命令(例如字符“r”)。当服务器收到“r”命令时,它知道它需要向客户端发送数据。

如果出于某种原因,你不想实现这么简单的协议,你也可以设置两个独立的QTcpServer实例,它们在不同的端口监听,比如8192和8193.你的“传感器客户端”会连接到端口8192,服务器通过端口号知道客户端将发送数据。您的“用户客户端”将连接到端口8193,服务器知道客户端期望数据并将发送所需数据。

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

答案 1 :(得分:0)

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

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

处理这样的客户端/服务器体系结构的一种更简单,更有效的方法在于使用某种现有的,经过验证的服务器。例如,假设您已经在使用C ++,则可以使用像Wt(http://www.webtoolkit.eu/wt/blog)这样的RESTful Web服务器。

更好的是,我会使用基于Ruby或Python的RESTful Web服务框架,如:

http://www.sinatrarb.com/

http://bottlepy.org/docs/dev/

http://flask.pocoo.org/

或者新的Ruby-on-Rails API:

http://blog.steveklabnik.com/posts/2012-11-22-introducing-the-rails-api-project

https://github.com/rails-api/rails-api

使用Ruby或Python开发服务器要快得多,也更容易。客户端可以以任何方式开发(使用Qt的C ++,Web浏览器中的Javascript以及许多其他方式)