如何在程序中判断局域网上的的机器连接互联网的状态 (50分)

  • 主题发起人 主题发起人 whjun_mail
  • 开始时间 开始时间
to netup
我现在高不懂的是这个函数GetSystemMetrics(SM_NETWORK)的返回值是总是 3
不管我在不在线都一样。这是为什么呢?请指教
 
在WinInet单元中有和internet联系的办法,可通过代理,不过要研究一下如何实现。
 
我用了wininet中的InternetCheckConnection这个函数,但是判断不出来,运行时提示错误
不知道怎样设置?
 
请各位高手帮帮我吧!!!!!!!!!
 
我没有办法,是没有研究过,所以抱歉!
 
真的没办法的,我试了太久太久 [:(]
 
我在局域网中也经常PING不出去,但是HTTP可以出去,
不妨试验一下用HTTP控件连接某一个固定的域名,检查有无正常返回HTML
 
to foxgang
用HTTP控件来判断是不是很慢呢?我要5秒钟判断一次的,这个方法在连不上的情况下返回
是不是很慢很慢??????
 
更正:
我这儿的是用sygate作为代理服务器的,可以ping得通本地的ISP服务器。
所以我想用ping的方法也是可行的嘛。
 
to casey
你好,现在老板正在检查工作,我就差这个功能了,请你帮助我,谢谢!!!!!!!!
 
to casey
请告诉我ICS控件再那下栽的。我找到的都不支持delphi5
 
http://www.pcpop.com/rush/casey/ics.zip

临时放的,明天下午6点删除,不大,就800多k,抓紧下.
 
to casey
我已下栽安装了,可还有一个问题,(我现在还是不能通过代理SYGATE PING出去,现在我PING 的是LAN中的服务器)就是在PING不通的情况下,程序运行非常慢,象死机
了一样,PING通了就没有问题了,请帮助解决,多谢!
 
那是因为你的timeout值设得太高了,根据当地的网络实际情况,设个适当的值吧.
timeout的时间设为5秒,如果ping不通,程序就会晕菜五秒,你看看能不能改成多线程的吧?
我是设成1500ms的,不知你是多少?
 
我是这样作的timer1.interval:=1000; ping1.timeout:=4000;你看看有什么问题
procedure TmainForm.Timer1Timer(Sender: TObject);
begin
ping1.DnsLookup('192.200.200.80');
end;
{----------------------}
procedure TmainForm.Ping1DnsLookupDone(Sender: TObject; Error: Word);
begin
Ping1.Address := Ping1.DnsResult;
Ping1.Ping;
end;
{-----------------------}
procedure TmainForm.Ping1EchoReply(Sender, Icmp: TObject; Error: Integer);
begin
if error<>0 then
image2.picture.Bitmap.Handle:=loadbmp(hand,myfile+'szhuangtai_over')//连接成功
else
image2.picture.Bitmap.Handle:=loadbmp(hand,myfile+'szhuangtai_down');//连接失败
end;
 
time1.interval必须小于ping1.timeout.
你设想一下,ping1的timeout时间才到1秒时,你的timer又要求ping1去ping了,
也就是说你在第一个4秒内就发了四个ping命令了(需要16秒时间来完成),
如果一直ping不通,你的程序就只能一直晕菜了,根本没空来处理其他消息。

我建议: time1.interval:=5000;ping1.timeout:=2000,这样程序每5秒时间内就
有3秒时间来处理其他的消息。如果你能做成多线程的,自然没有这个问题了。

另外,你认为4000ms的网络速度还有什么意义吗?我这边是100ms还嫌慢咧。
 
我很菜,还不知道怎样作多线程,你能帮助我吗????
 
用函数就行了
(uses wininet)

var
s:integer;
begin
//具体参数可以看msdn
s:= internet_connection_modem+internet_connection_lan;
if InternetGetConnectionState(@s,0) then
showmessage('在线')
else
showmessage('不在线');
end;
 
to qiandeng
不管怎样他返回的都是真值
 
后退
顶部