Delphi服务侦听TCP或UDP

时间:2013-07-25 17:44:40

标签: delphi windows-services udp delphi-xe3

阅读这个问题: Delphi Windows Service Design,我看到大多数设计师在OnExecute TServiceTThread方法的while not Terminated do begin // do something end; 中使用以下代码,以保持服务的有效性。

Sleep()

但是如果我需要(和我这样做)创建一个服务来响应(使用Indy)主应用程序发送的消息以发回一些身份验证数据,我该如何处理这些代码,忽略它或者把一些{{1}}放进去了吗?

1 个答案:

答案 0 :(得分:7)

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