在程序中如何接收ping命令反馈回来的数据(32bytes)?(50分)

  • 主题发起人 wangchengxue
  • 开始时间
W

wangchengxue

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序中如何接收ping命令反馈回来的数据(32bytes)?
delphi中有类似ping这样的命令吗?
 
自己格式化一个icmp包,发过去等着接受就是了
 
Delphi提供的的Demo有个例子就是你想要的结果,文件名是PingGui
 
什么是icmp包?如何操作?可以详细点吗?
pinggui这个例子在那里呢?我用的delphi5,里面没有这个例子。是否在delphi6或delphi7
里面?
 
PingGui在demo目录
 
直接用原始的ICMP套接子就可以接受这种包了,我测试过,一点问题都没有
 
ICS 组件套装里面有个组件, 可以实现此功能, 用起来方便,
却不适合了解底层功能,不过他的源代码倒是可以参考
 
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdRawBase, IdRawClient,
IdIcmpClient;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Memo1: TMemo;
IdIcmpClient1: TIdIcmpClient;
procedure Button1Click(Sender: TObject);
procedure IdIcmpClient1Reply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
IdIcmpClient1.Host:=Edit1.Text;
IdIcmpClient1.Ping
end;

procedure TForm1.IdIcmpClient1Reply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
begin
Memo1.Lines.Append('TimeToLive: '+IntToStr(AReplyStatus.TimeToLive));
Memo1.Lines.Append('BytesReceived: '+IntToStr(AReplyStatus.BytesReceived));
Memo1.Lines.Append('MsRoundTripTime: '+IntToStr(AReplyStatus.MsRoundTripTime))
end;

end.
 
to LeeChange:
IdBaseComponent, IdComponent, IdRawBase, IdRawClient,
IdIcmpClient;
这些组件那里有?我用的是delphi5,里面没有呀。所以我无法测试
张无忌张大侠可否详细点?
 
最简单的是你找个INDY的控件装上去,用LeeCheng 的办法
用我的办法你要从API开始写代码
 
装了D6就有Indy控件了.
 
我现在开发的系统使用delphi5,由于已经编写了许多代码,所以目前不会使用D6,我真的是感觉
有点为难。我使用这个方法主要是为了对网络中断进行快速检测。因为其他方法显得
比较慢。比如我在存取数据的时候先监测一下网络是否通畅。然后再决定是否存取。
 
单独Download indy的包也可以装在Delphi5上吧,我没试过,你可以试一下.
 
多人接受答案了。
 
顶部