如何根据远程的ip地址(有网关)来测试网络连接状态。(200分)

  • 主题发起人 主题发起人 alan5188
  • 开始时间 开始时间
A

alan5188

Unregistered / Unconfirmed
GUEST, unregistred user!
各位老兄:
问题急需解决,系统支持脱机和实时处理,为了提高处理速度,写一个Ping方法
[思路:根据服务器IP地址得到服务机名],但此方法在有网关(走路由)的情况下不行
请问问题何在, 原代码如下,请指教或更好方法 E_mail
alan5188@163.com :
谢谢!!!!!!
如何改进一定要详细;

Function TfrmBrushICCard.PingSever(var sIP:string):integer;
var
WSAData: TWSAData;
HostEnt: PHostEnt;
Addr:DWORD;
begin

try
//跟据IP地址取得机器名
WSAStartup($101, WSAData);
Addr := inet_addr(PChar(sIP));
HostEnt := gethostbyaddr(@Addr,sizeof(Addr), PF_INET);
sIP := HostEnt.h_name;
WSACleanup();
Result := 0;
Except
On E:Exception do begin
result := -1;
Exit;
end;
end;
 
你的方法不好啊,这样实现PING不是真正的PING,你这样的PING在网络上的机器很多的时候
或者有路由的时候是慢的要死的。

要实现PING,一种方法是自己对ICMP编程,或者你用现成的控件就行了
,网上好多的,我自己用的就是ICS的PING控件。

你如果坚持要用你的方法的话,请在NT的HOSTS文件里面加上 ip和机器名称的对应行。
文件在 system32/drivers/etc/里面,注意hosts没后缀的。
你也可以同时在system32/drivers/etc/lmhost文件里面加上ip和机器名称的对应行
不过要注意保存成lmhost,没后缀
 
那如果在局域网中怎么办?Ping外面是Ping不通的!
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=517290中有详细实现PING的代码
 
to 教父:
怎么不能ping通?我可以呀。
 
to 教父:
另,你那个”如何检测自己的机子是否已经联
上了互联网,包括是通过局域网上的网。“问题的答案
我放在这里:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=459242
 
您的问题已过期,要继续请结束,否则请提前,祝你圣诞快乐
 
呵呵~你可以看看在delphi目录下的demos下的Indy/PingGUI的。有很明确的,有原码!
 
后退
顶部