Check whether a PC has internet access

Any advice on how I'd check if the local system has internet access?

This needs to be compatible with 'standard' Windows operating systems, e.g. 32-bit, Win 95, 98, ME, XP, Vista, 7.

Thanks in advance.
LVL 13
rfwoolfAsked:
Who is Participating?
 
HypoConnect With a Mentor Commented:
There is actually a win-api function to check for internet connection called "InternetCheckConnection".
It is located in the wininet unit.

According to the help it supports the following OS: Windows Vista, Windows XP, Windows 2000 Professional, Windows NT Workstation 4.0, Windows Me, Windows 98, or Windows 95.

/Hypo
uses ..., wininet;

...

procedure TForm3.Button1Click(Sender: TObject);
const FLAG_ICC_FORCE_CONNECTION = 1;
begin
  if InternetCheckConnection('http://www.google.com', FLAG_ICC_FORCE_CONNECTION, 0)
    then ShowMessage('Connected')
    else ShowMessage('Not connected');
end;

Open in new window

0
 
Geert GOracle dbaCommented:
win95 ?
uh oh ... get out of there !
btw, you missed win3.1

you could use a webbrowser and open google.com
and then check if the document loads

off course there is the possibility your app gets blocked by the firewall
0
 
Pierre CorneliusConnect With a Mentor Commented:
The best way is to check if you have access to a specific internet resource. E.g. try to ping google or if you know the resource you will be accessing try that one instead.
0
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
rfwoolfAuthor Commented:
Thanks guys..
I saw in another PAQ:
http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_21915452.html
...the solution by HillGroover: a way to ping an address and it returns a boolean result.
This seems to be in line with what I'm looking for, but it's not easy to go and test it on multiple operating systems and with PCs with dialup etc..

Let me know if you have any ideas to top that solution, or if you foresee any problems.

'if you know the resource you will be accessing try that one instead.'
Not sure on what you mean by resource.
0
 
Emmanuel PASQUIERFreelance Project ManagerCommented:
You could use Indy components to do that

TIDIPWatch :
Determines the online status and IP addresses for a computer.

* property IsOnline: Boolean;
Description
IsOnline is a read-only Boolean property used to identify the current online status. IsOnline is updated in the CheckStatus method, and is set to True when the current IP address is not empty ('') or the default local host value 127.0.0.1.

That will tell you if you are connected to your DHCP or have a fixed IP address working, but maybe that will not be enough for you, and you will want to know if you can actually access Internet. That is a start, then you should try other components :

TIdEcho (Ping) with www.google.com is probably the quickest way to check "internet" availability
0
 
CodedKConnect With a Mentor Commented:
Hi rfwoolf,

Because of the variety of ways of connecting to the internet and the platform variety you want it to work
there is no real way to check.

So ping Google:
http://delphi.about.com/od/internetintranet/l/aa081503a.htm


0
 
Emmanuel PASQUIERConnect With a Mentor Freelance Project ManagerCommented:
my bad, actually Ping is not performed with TIdEcho but with TIdIcmpClient

function CheckInternet:Boolean;
begin
 Result:=False;
 With TIdIPWatch.Create(nil) do
  try
   if ForceCheck Then
    begin
     with TIdIcmpClient.Create(nil) do
      try
       Host := 'www.google.com';
       ReceiveTimeout:=999; //TimeOut du ping
       Ping();
       Result := True;
      finally
       Free;
      end;
     if Not Result Then ShowMessage('Google not available !');
    end Else ShowMessage('No IP address');
  finally
   Free;
  end
end;

Open in new window

0
 
systanCommented:
rfwoolf;
CodedK has the best answer.
But how long would you closed all your open post?
I have seen several question answered from delphi experts.
I'm sorry if I offended you,  but,  that is not good,  throwing some points to the experts who participated in your post is one great help.
0
 
Emmanuel PASQUIERFreelance Project ManagerCommented:
Yes of course ! InternetCheckConnection ! I forgot about that one...

Thanks Hypo ! And it's good to hear from you again !
0
 
systanCommented:
Welcome back Hypo;
I'm glad to hear you.

Before I post my first comment,  I'm thinking to post "InternetCheckConnection" but probably ping is the best and quickiest way to find out, because you can customized the byte to send, you can send 1 byte n reply.
0
 
HypoCommented:
Thanks :) It's good to be back again... I've been way too busy with other projects for quite some time now, but I'll try to look in here more often :D

/Hypo
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.