如何检测机器是否已经连接到Internet?(100分)

  • 主题发起人 主题发起人 王文海
  • 开始时间 开始时间

王文海

Unregistered / Unconfirmed
GUEST, unregistred user!
我想自己编写一个上网计费程序,但苦于不知如何检测我的机器是否已经拨号上网。请教各位高手!
 
这问题好象以前有人问过。
我想你有两条路做
1是检测COM口的打开关闭情况
2是检测本机的IP变化

第一种方法没做过
第二种方法我试验过, 连入INTERNET后,可以找到自己的第二IP(第一个是本机的
局域网IP)
 
<a href='http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=51'>here</a>
 
王寒松:你好!请你能不能说得详细些,我想你的第二条路比较可行,可我是个初学者,并不知道如何检测本机的IP。
 
我想使用tcp控件可以很方便的解决这个问题。

procedure TForm1.Button1Click(Sender: TObject);
begin
if TCP1.LocalIp = '0.0.0.0' then
ShowMessage('Your not connected!');
else
……;
end;

详见:
http://www.borland.com/devsupport/delphi/qanda/FAQ1969D.html
 
forsnow's method is not always correct: If I'm using local net and
MODEM, then my local IP is always not 0.

As for Wang hansong's method 2, you can use:
gethostname, then
gethostbyname, and analyze the return value,
if you found new IP addr comes into your HOST struct,
then it shows you are connected onto the Internet.
 
无需控件,源码如下:
uses WinInet;

procedure TForm1.Button1Click(Sender: TObject);

function GetOnlineStatus : Boolean;
var ConTypes : Integer;
begin
ConTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN + INTERNET_CONNECTION_PROXY;
if (InternetGetConnectedState(@ConTypes, 0) = False)
then Result := False
else Result := True;
end;

begin
if GetOnlineStatus then
ShowMessage(' Connected')
else ShowMessage(' not Connected');
end;
 
后退
顶部