Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 可以在一个表单上放置多个ClientSocket组件吗?_Delphi_Networking_Tcp_Serversocket_Tclientsocket - Fatal编程技术网

Delphi 可以在一个表单上放置多个ClientSocket组件吗?

Delphi 可以在一个表单上放置多个ClientSocket组件吗?,delphi,networking,tcp,serversocket,tclientsocket,Delphi,Networking,Tcp,Serversocket,Tclientsocket,我想写一个程序,将连接到多台计算机从一台计算机。有点像“指挥中心”,你可以在一台PC上远程监控所有远程系统 我的计划是在一个表单上有多个客户端套接字。它们将远程连接到个人电脑。因此,他们可以向他们请求信息以显示在窗口上。远程PC将成为主机。这可能吗?直接回答你的问题:是的,你可以做到 长回答:是的,你可以这样做,但你确定你的设计是正确的吗?是否确实要创建一个到每个客户端的并行连接?也许你不知道!如果是,那么您可能希望在单独的线程中运行它们 如果你想时不时地发送一些命令(并且你没有做一些持续的视频

我想写一个程序,将连接到多台计算机从一台计算机。有点像“指挥中心”,你可以在一台PC上远程监控所有远程系统


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

直接回答你的问题:是的,你可以做到

长回答:是的,你可以这样做,但你确定你的设计是正确的吗?是否确实要创建一个到每个客户端的并行连接?也许你不知道!如果是,那么您可能希望在单独的线程中运行它们

如果你想时不时地发送一些命令(并且你没有做一些持续的视频监控),为什么不在客户端之间使用一个连接和“切换”呢

我无法告诉您更多关于设计的信息,因为您的问题并不清楚您想要构建什么(您到底在“监控”什么)

非常重要

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

  • 如果远程计算机作为服务器运行,您将有很多问题要向您的客户解释(如果他们通过路由器连接(可能是)到Internet)如何设置路由器和软件防火墙。例如,如果远程计算机正在侦听来自您的命令,则在端口1234(例如),路由器中的防火墙将在默认情况下阻止从“外部”计算机(来自您)到该端口的任何连接尝试
  • 如果您的远程计算机作为客户端运行,那么它们将如何知道主IP(您的IP)。你有静态IP吗

  • 您实际需要的是在您的机器上运行的模块上安装一个ServerSocket。 您的所有远程PC都将通过其各自的ClientSocket进行连接

    通过将ClientSocket放在您机器上运行的模块上,将ServerSocket放在远程机器上运行的模块上,您可以使您的设计反过来

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


    现在,如果您仍然希望在您的计算机上有多个ClientSocket,那么正如Salet所说,您可能需要一个多线程应用程序,其中每个线程负责一个ClientSocket。

    我建议使用Internet Direct(Indy),因为它们在线程中运行良好,并且您可以指定每个连接的连接超时,因此,您的监控应用程序将能够比默认操作系统连接超时更快地获得“阴性”测试结果


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

    什么样的监控?监控系统性能?日期/时间?“监控”的权重将定义您对可伸缩性的要求。同意Jerry的观点。这些问题没有答案,未知变量太多。如果你有一个静态IP,你有一个域名,你可以指向该IP的子域吗?(+1)如果有一天你决定将服务器移动到另一个IP,你也会有一场噩梦。DNS可以解决这个问题。问题是关于连接到主机(服务器),你的答案是关于连接到客户端。另外,打开防火墙端口不是“火箭科学”,我不会说它会带来很多问题。@mjn当它是关于你自己的路由器时,它确实不是火箭科学(即使我有两个路由器拒绝工作…今天很多路由器都有有有问题的软件)。但看起来他需要将应用程序交付给随机用户。在这种情况下,由于路由器的原因,“点击并运行”解决方案是不可能的。他必须向用户解释如何配置路由器。每个路由器都有自己的设置过程。@mjn如前所述,如果他希望客户端连接到他的“主”计算机(他是服务器),那么他的计算机需要有一个静态IP。