Delphi服务侦听TCP或UDP

Ple*_*rds 2 delphi udp windows-services delphi-xe3

读了这个问题: 德尔福Windows服务的设计,我看到大部分的设计师在使用下面这段代码OnExecuteTServiceTThread方法,以保持服务活着.

while not Terminated do
begin
  // do something
end;
Run Code Online (Sandbox Code Playgroud)

但是,如果我需要(和我一样)来创建一个服务(使用印),以便发回一些认证数据由主应用程序发送的消息,我该怎么用这个代码做回应,忽略它或把一些Sleep()在它?

Rem*_*eau 7

Indy TIdTCPServerTIdUDPServer组件是多线程的,因此您根本不需要使用该TService.OnExecute事件.你可以只激活它们TService.OnStart的事件,并在其停用TService.OnStop事件,然后分配处理的TIdTCPServer.OnExecute,并TIdUDPServer.OnUDPRead在需要的事件.这两个事件都已经为您循环,因此您不需要while not Terminated循环.只需根据需要读取/处理一个请求,然后退出,并等待下一个事件重复.让服务器处理引发的任何异常.而且请记住,TIdUDPServer有一个ThreadedEvent属性,默认为false,所以你应该把它设置为True一个服务里面.