Delphi XE6 实现Ping的功能


本文整理自网络,侵删。

 介绍

本代码实现了windows的ping的功能,通过使用icmp.dll里的IcmpSendEcho()函数,来发送Ping命令,具体代码:

function TPing.PingHost(IP: string; var RTT: DWORD; TTL: Byte = 64; TimeOut: DWORD = 4000): Integer;
var
  // IP Options for packet to send
  IPOpt: TIPOptionInformation;
  FIPAddress: DWORD;
  pReqData, pRevData: PAnsiChar;
  // ICMP Echo reply buffer
  pIPE: PIcmpEchoReply;
  FSize: DWORD;
  MyString: AnsiString;
  FTimeOut: DWORD;
  BufferSize: DWORD;
  OpResult: DWORD;
begin
  Result := -1;
  RTT := 0;
  if ip <> '' then
  begin
    FIPAddress := inet_addr(MarshaledAString(AnsiString(IP)));
    FSize := 30;
    BufferSize := SizeOf(TIcmpEchoReply) + FSize;
    GetMem(pRevData, FSize);
    GetMem(pIPE, BufferSize);
    FillChar(pIPE^, SizeOf(pIPE^), 0);
    pIPE^.DataPtr := pRevData;
    MyString := 'Test Net - Sos Admin';
    pReqData := PAnsiChar(MyString);
    FillChar(IPOpt, SizeOf(IPOpt), 0);
    IPOpt.TTL := TTL;
    FTimeOut := TimeOut;
    try
      OpResult := IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString), @IPOpt, pIPE, BufferSize, FTimeOut);
      Result := PIPE.Status;
      if pIPE.Status = 0 then
        RTT := PIPE.RTT;
    except
      Result := -2;
      FreeMem(pRevData);
      FreeMem(pIPE);
      Exit;
    end;
    FreeMem(pRevData);
    FreeMem(pIPE);
  end;

end;

相关阅读 >>

Delphi 时间戳与日期互转

Delphi下cpu getcpuid实现(x86和x64)

Delphi 获取屏幕缩放比例

Delphi2009 使用 png 图片

Delphi firdac 对 sqlite 数字, int64也会被截断,会出现负数情况处理

Delphi 权限控制(Delphi tactionlist方案)

Delphi的format使用总结

Delphi android实例-录音与回放(播放mp3)(xe8+小米2)

Delphi 通过idhttp实现登录验证

Delphi android device information

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...