【问题标题】:how to identify which client has closed and update it in GUI?如何识别哪个客户端已关闭并在 GUI 中更新?
【发布时间】:2015-06-18 09:12:47
【问题描述】:

我有一个服务器和一个客户端程序。当客户到来时,我会更新客户的数量。但是,我无法显示关闭后哪个客户已关闭。有谁能够帮我?我正在使用 socketdescriptor 来跟踪存在的客户。

我也有不同类型的客户端,我正在使用线程概念。 当客户端到达时,继承 QTcpServer 的 Server 类接受连接并将其传递给继承 QTcpSocket 的 requesthandler 类。在此我调用线程类来定义不同类型的客户端。在这里,我正在调用一个在 GUI 中更新客户端编号的函数。 但是,当我关闭连接时,我无法确定哪个客户端已关闭,因此无法在客户端中更新。 如何克服这个问题?

【问题讨论】:

  • 你不能通过他们的IP地址来识别客户吗?我认为可以通过获取 QTcpSocket 然后通过 peerAddress() 获取 IP,就像它所描述的 here

标签: qt client-server tcp-ip


【解决方案1】:
void QAbstractSocket::disconnected() [SIGNAL]

是要走的路。

如果在某些情况下客户端在同一台机器上,它们无论如何都必须在服务器上识别(唯一的 id 或它是应用程序的类型)。

这可以通过初始消息“告诉服务器”连接什么样的客户端来完成。存储在QMap<QTcpSocket*, MyClientType> 中,您可以确定哪个客户端已断开连接以及它的类型。

干杯

【讨论】:

  • 我正在运行多个服务器来连接多种类型的客户端。这样可以吗?我可以使用socketdescriptor作为唯一ID吗?
  • 如果您的所有应用程序(服务器和客户端)都有一个唯一的 ip 地址,那么这个 ip 就可以解决问题。如果有多种类型的应用程序,但每种类型一次只有一种,则您拥有唯一的 ID。如果您只需要更新 ui,我认为您将使用动态小部件来显示它们的状态,所以只需保存链接到 wich 小部件的套接字指针并根据需要更新它
猜你喜欢
  • 1970-01-01
  • 2011-07-13
  • 2011-01-27
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
相关资源
最近更新 更多