delphi中TIdUDPServer是如何监听端口数据的

delphi中TIdUDPServer是如何监听端口数据的,第1张

TIdUDPServer控件

用来实现一个UDP服务器

所在单元

IdUDPServer

属性

property Bindings: TIdSocketHandles

用来收集f TIdSocketHandle实例。包含ID_SOCK_DGRAM类型的socket。

property DefaultPort: integer

监听新连接的端口。

property ThreadedEvent: boolean

指示UDP读事件的执行方式。是否以线程的形式执行

property Active: Boolean

是否开始监听。

property Binding: TIdSocketHandle

只读属性。指示读写传送的socket句柄。

property BroadcastEnabled: Boolean

是否广播传送数据

property BufferSize: Integer

UDP包的尺寸。

property ReceiveTimeout: Integer

从一个服务中读取数据的超时时间。

property LocalName: string

本地计算机名称。

property Version: string

只读属性,用来获取Indy部件的版本号码。

方法

procedure Broadcast(const AData: stringconst APort: integer)

在网络上发送数据到所有的计算机。

unction ReceiveBuffer(var ABufferconst ABufferSize: Integerconst AMSec: Integer =

IdTimeoutDefault): integeroverload

function ReceiveBuffer(var ABufferconst ABufferSize: Integervar VPeerIP: stringvar

VPeerPort: integerAMSec: Integer = IdTimeoutDefault): integeroverload

远程连接中读取数据

function ReceiveString(const AMSec: Integer = IdTimeoutDefault): stringoverload

function ReceiveString(var VPeerIP: stringvar VPeerPort: integerconst AMSec: Integer =

IdTimeoutDefault): stringoverload

从远程连接中读取数据

procedure Send(AHost: stringconst APort: Integerconst AData: string)

向远程计算机系统发送数据。

procedure SendBuffer(AHost: stringconst APort: Integervar ABufferconst AByteCount:

integer)

向远程计算机系统发送数据

事件

property OnUDPRead: TUDPReadEvent

UDP读取事件发生时执行。

参数

ABinding

接受UDP数据报的socket。

AData

在UDP数据报中接受数据的流。

property OnStatus: TIdStatusEvent

指示当前连接状态的句柄。

参数

aaArgs

用来构造当前状态文本消息的格式化参数。

axStatus

当前连接状态。取值范围与TIdUDPClient类中的OnStatus事件相同。

procedure BeginWork(AWorkMode: TWorkModeconst ASize: Integer = 0)virtual

当OnBeginWork事件触发时执行

AWorkMode可以取的值:

wmRead--从远程连接中读取数据。

wmWrite-- 向远程连接发送数据。

procedure DoWork(AWorkMode: TWorkModeconst ACount: Integer)virtual

当OnWork事件触发时执行。

procedure EndWork(AWorkMode: TWorkMode)virtual

当OnEndWork事件触发时执行。

我写了一个函数在Windows XP SP2下测试通过,可以直接得到状态字符串

调用格式很简单,查看某服务状态的最简单方法:

ShowMessage(GetServiceStatusString('Brower'))

将显示Computer Browser服务的运行情况,Computer Browser服务的服务名称是Browser,还有Remote Procedure Call (RPC)服务的名字是RpcSs,Telnet的服务名称是TlntSvr等等

我没使用过mysql和apache服务,因此我无法知道他们的服务名字,但是你可以开始->运行->services.msc然后在服务列表中找到你要的服务,双击它,第一页的最上边就是服务名称,这是服务自己注册的名称,无论使用什么办法,还是要使用服务名称来区别服务

本函数得到是运行状态字符串,明白了程序原理的话,很容易将它转化成数字返回值,需要的话告诉我.函数是独立的,没有使用类库,不需要控件安装,其实就是API实现的,因此效率最高.

uses

  WinSvc //引用此单元

 

function GetServiceStatusString(sServiceName: string): string

var

  hService, hSCManager: SC_HANDLE

  SS: TServiceStatus

begin

  hSCManager := OpenSCManager(nil, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CONNECT)

  if hSCManager = 0 then

  begin

    result := 'Can not open the service control manager'

    exit

  end

  hService := OpenService(hSCManager, PChar(sServiceName), SERVICE_QUERY_STATUS)

  if hService = 0 then

  begin

    CloseServiceHandle(hSCManager)

    result := 'Can not open the service(' + sServiceName + ')'

    exit

  end

  if not QueryServiceStatus(hService, SS) then

    result := 'Can not query the service status'

  else

  begin

    case SS.dwCurrentState of

      SERVICE_CONTINUE_PENDING:

        result := 'The service(' + sServiceName + ') continue is pending'

      SERVICE_PAUSE_PENDING:

        result := 'The service(' + sServiceName + ') pause is pending.'

      SERVICE_PAUSED:

        result := 'The service(' + sServiceName + ') is paused.'

      SERVICE_RUNNING:

        result := 'The service(' + sServiceName + ') is running.'

      SERVICE_START_PENDING:

        result := 'The service(' + sServiceName + ') is starting.'

      SERVICE_STOP_PENDING:

        result := 'The service(' + sServiceName + ') is stopping.'

      SERVICE_STOPPED:

        result := 'The service(' + sServiceName + ') is not running.'

    else

      result := 'Unknown Status'

    end

  end

  CloseServiceHandle(hSCManager)

  CloseServiceHandle(hService)

end

IdTCPServer1.active:=false

IdTCPServer1.Bindings.Clear//需要先清除已绑定的.

IdTCPServer1.DefaultPort := 8000

IdTCPServer1.Active := true


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/8094576.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存