zoukankan
html css js c++ java
用Delphi实现Ping类
网络上的一个实现PING功能的类,修改了部分代码。
=======================================
unit ping; interface uses Windows, SysUtils, Classes, Controls, Winsock, StdCtrls; function pingip(ip:string):string; 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; Tping =class(Tobject) private { Private declarations } hICMP: THANDLE; IcmpCreateFile : TIcmpCreateFile; IcmpCloseHandle: TIcmpCloseHandle; IcmpSendEcho: TIcmpSendEcho; public procedure pinghost(ip:string;var info:string); constructor create; destructor destroy;override; { Public declarations } end; var hICMPdll: HMODULE; implementation constructor Tping.create; begin inherited create; hICMPdll := LoadLibrary('icmp.dll'); @ICMPCreateFile := GetProcAddress(hICMPdll, 'IcmpCreateFile'); @IcmpCloseHandle := GetProcAddress(hICMPdll,'IcmpCloseHandle'); @IcmpSendEcho := GetProcAddress(hICMPdll, 'IcmpSendEcho'); hICMP := IcmpCreateFile; end; destructor Tping.destroy; begin FreeLibrary(hIcmpDll); inherited destroy; end; procedure Tping.pinghost(ip:string;var info:string); var // IP Options for packet to send IPOpt:TIPOptionInformation; FIPAddress:DWORD; pReqData,pRevData:PChar; // ICMP Echo reply buffer pIPE:PIcmpEchoReply; FSize: DWORD; MyString:string; FTimeOut:DWORD; BufferSize:DWORD; begin if ip<>'' then begin FIPAddress := inet_addr(PChar(ip)); FSize := 40; BufferSize := SizeOf(TICMPEchoReply) + FSize; GetMem(pRevData,FSize); GetMem(pIPE,BufferSize); FillChar(pIPE^, SizeOf(pIPE^), 0); pIPE^.Data := pRevData; MyString := 'Test Net - Sos Admin'; pReqData := PChar(MyString); FillChar(IPOpt, Sizeof(IPOpt), 0); IPOpt.TTL := 64; FTimeOut := 4000; try IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString),@IPOpt, pIPE, BufferSize, FTimeOut); if pReqData^ = pIPE^.Options.OptionsData^ then info:=ip+ ' ' + IntToStr(pIPE^.DataSize) + ' ' +IntToStr(pIPE^.RTT); except info:='Can not find host!'; FreeMem(pRevData); FreeMem(pIPE); Exit; end; FreeMem(pRevData); FreeMem(pIPE); end; end; function pingip(ip:string):string; var str:string; ping:Tping; begin ping:=Tping.create ;//一定要初试化哦 ping.pinghost('127.0.0.1',str); result:=str; ping.destroy ; end; end.
谢祥选【小宇飞刀(xieyunc)】
查看全文
相关阅读:
非常不错的学习网站——技术胖
Vue中使用mescroll.js实现下拉刷新
2020.10.07【NOIP提高A组】模拟
2020.10.06【NOIP提高A组】模拟 总结
2020.09.19【NOIP提高A组】模拟
2020.09.12【NOIP提高A组】模拟
GMOJ 4417. 【HNOI2016模拟4.1】神奇的字符串 题解
上下界网络流学习笔记
GMOJ 3571. 【GDKOI2014】内存分配 题解
[模板]人工栈
原文地址:https://www.cnblogs.com/xieyunc/p/2793657.html
最新文章
次小生成树的两种写法(重边or不重边)
青蛙的旅行 poj 1061
如何让页面能够切换语言?
如何制作一个简单的换肤功能
关于苹果X及以上底部安全区适配的解决办法
change和onchange、click和onclick的区别,以及onchange和onclick的区别
svg图标轮廓绘制动画
按钮动画之抖动
当浏览器窗口改变大小时,如何让文字也相应改变大小
new 一个对象和不用new创建一个对象有啥区别?
热门文章
jquery消息红点提示
jquery将后台数据实时渲染在页面
Web前端助手——FeHelper
微信小程序——选项卡demo
微信小程序实例源码大全demo下载
微信小程序开发资源汇总
Vue中使用vue-awesome-swiper实现移动端的轮播
移动端的touch事件
解决 position: fixed的元素写到mescroll的div里面会抖动的问题
mescroll.js下拉刷新使用时应该注意的问题(卡顿情况,有时候会拉不动)
Copyright © 2011-2022 走看看