Delphi 服务监听 TCP 或 UDP

标签 delphi windows-services udp delphi-xe3

阅读这个问题: Delphi Windows Service Design ,我看到大多数设计者在 TServiceOnExecuteTThread 方法中使用下面的代码,以保持服务存活。

while not Terminated do
begin
  // do something
end;

但是如果我需要(并且我确实)创建一个服务来响应(使用 Indy)主应用程序发送的消息以便发回一些身份验证数据,我该如何处理这段代码,忽略它或把一些 Sleep() 放进去?

最佳答案

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

关于Delphi 服务监听 TCP 或 UDP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17865131/

相关文章:

c - UDP sendto() 给出 "invalid user space address"错误

Delphi w Indy 10 : Unable to connect via TLS 1. 2 w SSL "Best Practices"在网络服务器上就位

c++ - 访问 DSN 有哪些访问限制

c# - 如何让程序不使用100% cpu?

deployment - 如何通过 VSTS 版本定义覆盖 Windows 服务 .exe.config 文件中的键

c++ - 如何从多个组播远程接口(interface)接收?

Delphi XE2风格绘画

delphi - TListView 组件中的复选框不滚动

windows - 什么可以使程序第二次运行得更快?

Python 通过 UDP 记录忽略 setLevel()