delphi中利用winsock判断是否ping通某IP
来源:互联网 发布:热血无赖优化 编辑:程序博客网 时间:2024/05/20 16:40
突然要用到如题功能,自己在网上搜了下,自己写了个小Demo,以备以后不时之需。。。
特此鸣谢资料一:http://hi.baidu.com/654474209/blog/item/77b28224e95dae1e8a82a1ac.html
function PingHost(HostIP: String): Boolean;
typePIPOptionInformation = ^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;
FIPAddress :=inet_addr(PChar(HostIP));
MyString :='Hello,World'; //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 :=1000;
try
Result :=IcmpSendEcho(hICMP,FIPAddress,pReqData,
Length(MyString),nil,pIPE,BufferSize,FTimeOut)>0;
finally
IcmpCloseHandle(hICMP);
FreeLibrary(hICMPdll);
FreeMem(pRevData);
FreeMem(pIPE);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
IP:String;
flag:Boolean;
begin
IP:='192.168.3.1';
flag:=PingHost(IP);
if flag=true then
MessageBox(0,'pingͨ','Ìáʾ',MB_ICONASTERISK and MB_ICONINFORMATION)
else
MessageBox(0,'ping²»Í¨','Ìáʾ',MB_ICONASTERISK and MB_ICONINFORMATION);
end;
PS:在引用单元中加入winsock。。。
- delphi中利用winsock判断是否ping通某IP
- java判断ip是否能ping通
- ping +IP如何判断网络是否连接
- 判断IP是否能够ping成功
- java判断ip是否能ping通
- 判断ip是否能ping通
- C#判断ip地址是否ping的通
- C#判断ip地址是否可以ping的通
- 8、批量判断每个IP地址是否ping的通
- 利用Perl Net::Ping检测网段IP是否…
- delphi 域名转ip并判断ip是否可以联通
- delphi中判断字符串是否为数字
- delphi中如何判断打印机是否安装
- Java ping命令,查看ip是否在网络中连接
- PHP判断是否ping通
- 如何判断IP地址是否在某个IP段中
- 利用Winsock进行IP通信编程
- delphi 中判断对象是否具备某一属性
- 关于“做一个聊天+信息分享客户端”的设想(SNS?)
- 最长上升子序列NLOGN算法
- Meta标签的使用(搜索方面)
- PCI总线和PCIE总线的差异
- Session Manager
- delphi中利用winsock判断是否ping通某IP
- MD5加密密码
- Netstat命令详解 和服务启动批处理
- [转帖] 关于ET 测试方法研究
- 装饰模式
- 以太网和rapidio
- log4j 级别(level)
- 本文介绍一个 iPhone 图像处理库,提供了边缘检测、直方图均衡等功能。
- 创建Symbolic Link