可以将多个ClientSocket组件放在表单上吗?

时间:2014-09-25 19:10:43

标签: delphi networking tcp serversocket tclientsocket

我正在寻找一个程序,它将从一台计算机连接到许多计算机。有点像"指挥中心"您可以在一台PC上远程监控所有远程系统。

我的计划是在表单上放置多个客户端套接字。他们将远程连接到个人电脑。因此,他们可以向他们请求信息以显示在窗口上。远程PC将是主机。这可能吗?

3 个答案:

答案 0 :(得分:3)

直接回答您的问题:是的,您可以这样做。

答案很长:是的,你可以这样做,但你确定你的设计是正确的吗? 您确定要创建并行连接,每个客户端一个吗?可能你没有!如果是,那么您可能希望在单独的线程中运行它们。

如果您想不时发送一些命令(并且您没有进行某种持续的视频监控),为什么不使用一个连接并在客户端之间“切换”?

我无法告诉你更多有关设计的信息,因为你的问题并不清楚你想要建立什么(你究竟是什么'监控')。

非常重要!

在设计应用程序之前需要考虑的两个重要注意事项(仅当远程计算机不在LAN中时才通知相关者(通过Internet连接到它们)):

  1. 如果远程计算机作为服务器运行,您将有很多的问题来解释您的客户(如果他们通过路由器连接到Internet(并且他们可能已经连接到Internet))如何设置路由器和软件防火墙。例如,如果远程计算机正在侦听来自您的命令,则在端口1234(例如)上,路由器中的防火墙将阻止BY DEFAULT从“外部”计算机(从您)到该端口的任何连接尝试。
  2. 如果您的远程计算机作为客户端运行,他们将如何知道主IP(您的IP)。你有静态IP吗?

答案 1 :(得分:2)

您实际需要的是在您的计算机上运行的模块上的一个ServerSocket。 所有远程PC将通过其各自的ClientSocket连接到其中。

通过将ClientSocket放在计算机上运行的模块和远程计算机上运行的模块上的ServerSocket上,可以使设计成为其他方式。

但是你最终会为每个ServerSocket创建一个ClientSocket,如果你的远程服务器数量增加了会怎么样。

现在,如果您仍希望在您的计算机上安装多个ClientSockets,那么Altar表示您可能需要一个多线程应用程序,其中每个线程负责一个ClientSocket。

答案 2 :(得分:0)

我建议使用Internet Direct(Indy),因为它们在线程中运行良好,并且您可以指定每个连接的连接超时,以便您的监控应用程序能够获得“否定”消息。测试结果比默认的OS连接超时更快。

我将每个客户端包装在一个运行内部监控线程的类中,而不是将它们放在表单上。最初的工作量更多,但更容易保持彼此独立。