zoukankan      html  css  js  c++  java
  • Delphi 快速Ping局域网IP或网站并返回结果的方式

    Delphi 快速Ping局域网IP并返回结果的方式

    引入单元:WinSock;

    function PingHost(HostIP: string): boolean;
    type
      PIPOptionInformation = ^TIPOptionInformation;
      TIPOptionInformation = packed record
        TTL: Byte;
        TOS: Byte;
        Flags: Byte;
        OptionsSize: Byte;
        OptionsData: pchar;
      end;
      PIcmpEchoReply = ^TIcmpEchoReply;
      TIcmpEchoReply = packed record
        Address: DWORD;
        Status: DWORD;
        RTT: DWORD;
        DataSize: WORD;
        Reserved: WORD;
        Data: Pointer;
        Options: TIPOptionInformation;
      end;
      TIcmpCreateFile = function: THandle; stdcall;
      TIcmpCloseHandle = function(IcmpHandle: THandle): boolean; stdcall;
      TIcmpSendEcho = function(IcmpHandle: THandle; DestinationAddress: DWORD; RequestData: Pointer; RequestSize: WORD; RequestOptions: PIPOptionInformation; ReplyBuffer: Pointer; ReplySize: DWORD; Timeout: DWORD): DWORD; stdcall;
    var
      hICMP: THandle;
      hICMPdll: THandle;
      IcmpCreateFile: TIcmpCreateFile;
      IcmpCloseHandle: TIcmpCloseHandle;
      IcmpSendEcho: TIcmpSendEcho;
      pIPE: PIcmpEchoReply; //   ICMP   Echo   reply   buffer
      FIPAddress: DWORD;
      FSize: DWORD;
      FTimeOut: DWORD;
      BufferSize: DWORD;
      pReqData, pRevData: pchar;
      MyString: string;
    begin
      result := false;
      hICMPdll := LoadLibrary('icmp.dll');
      if hICMPdll = 0 then
        Exit;
      @IcmpCreateFile := GetProcAddress(hICMPdll, 'IcmpCreateFile');
      @IcmpCloseHandle := GetProcAddress(hICMPdll, 'IcmpCloseHandle');
      @IcmpSendEcho := GetProcAddress(hICMPdll, 'IcmpSendEcho');
      hICMP := IcmpCreateFile;
      if (hICMP = INVALID_HANDLE_VALUE) then Exit;
      //uses winsock;
      FIPAddress := inet_addr(pchar(HostIP)); //Delphi xe:  inet_addr(PANSIChar(ansistring(HostIP)));
      MyString := 'Hello TaoRoy'; //send data buffer
      pReqData := pchar(MyString);
      FSize := 40; //receive data buffer
      BufferSize := SizeOf(TIcmpEchoReply) + FSize;
      GetMem(pIPE, BufferSize);
      FillChar(pIPE^, SizeOf(pIPE^), 0);
      GetMem(pRevData, FSize);
      pIPE^.Data := pRevData;
      FTimeOut := 50; //超时间隔毫秒
      try
        result := IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString), nil, pIPE, BufferSize, FTimeOut) > 0;
      finally
        IcmpCloseHandle(hICMP);
        FreeLibrary(hICMPdll);
        FreeMem(pRevData);
        FreeMem(pIPE);
      end;
    end;

    示例:

    var
      b:boolean;
    begin    
      b:=PingHost('192.168.0.2');
      if b then  ShowMessage('已连接') else ShowMessage('未连接') ;
    
      b:=PingHost('www.baidu.com');
      if  then  ShowMessage('True') else ShowMessage('False') ;
    end;
    

    创建时间:2021.05.11  更新时间:

    博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你所有帮助,谢谢!
  • 相关阅读:
    在chrome中利用“油猴”为每个网页增加“返回顶部”功能
    EasyVS 0.3版本发布 给力变换vs编辑器主题
    python使用matplotlib绘图 barChart
    Automatic IE Testing With Python
    上网计时小助手
    关于在未安装frontpage 服务扩展的情况下创建web应用程序的问题
    申请加入了sharepoint团队
    Linq学习之旅——LINQ查询表达式
    使用 ASP.NET 创建的 XML Web 服务的概述
    用C#获取硬盘序列号,CPU序列号,网卡MAC地址
  • 原文地址:https://www.cnblogs.com/guorongtao/p/14756326.html
Copyright © 2011-2022 走看看