![]() |
Internet Detection |
Post Reply
|
| Author | ||
tralfaz
Groupie
Joined: 21 June 2009 Status: Offline Points: 36 |
Post Options
Thanks(0)
Quote Reply
Topic: Internet DetectionPosted: 21 June 2009 at 11:04am |
|
|
Hi
I need to know if the computer is connected to the internet. I'm using Windows calls like: (FARPROC&)InetIsOffline = GetProcAddress(hURL, _T("InetIsOffline")); This barely works. Most of the time when my wifi is turned off, or cable unplugged, it still says I'm connected. Question: are there internet connection routines in the Toolkit? If so, are there examples? Thanks! |
||
![]() |
||
SuperMario
Senior Member
Joined: 14 February 2004 Status: Offline Points: 18057 |
Post Options
Thanks(0)
Quote Reply
Posted: 21 June 2009 at 12:26pm |
|
|
No, Toolkit does not have any such methods.
|
||
![]() |
||
JantjeKeizer
Groupie
Joined: 12 February 2008 Status: Offline Points: 70 |
Post Options
Thanks(0)
Quote Reply
Posted: 21 June 2009 at 3:37pm |
|
|
I had the same problems, then I simply tried pinging google, which has proven to be enough in my case.
|
||
![]() |
||
tralfaz
Groupie
Joined: 21 June 2009 Status: Offline Points: 36 |
Post Options
Thanks(0)
Quote Reply
Posted: 21 June 2009 at 4:30pm |
|
|
Could you show me how you did that? Thanks!
|
||
![]() |
||
adrien
Senior Member
Joined: 30 April 2007 Location: New Zealand Status: Offline Points: 449 |
Post Options
Thanks(0)
Quote Reply
Posted: 22 June 2009 at 2:21am |
|
|
There's an "Event" SDK in windows from windows 2000 onwards that you can use to determine things like whether you have connectivity or not, and gives you indications when people log in or off, and power events (like going from utility to UPS power).
Other options are to do things like use IPHelper APIs to enumerate the system route table to see if you have a route to a host or not. I presume you want something that won't a) block b) cause a dial Cheers Adrien |
||
![]() |
||
PPL1
Groupie
Joined: 10 April 2006 Location: Canada Status: Offline Points: 70 |
Post Options
Thanks(0)
Quote Reply
Posted: 22 June 2009 at 1:01pm |
|
|
I use this function, and it works fine:
Public Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef dwFlags As Long, ByVal dwReserved As Long) As Long Public Function IsOnline() As Boolean Dim LFlags As Long IsOnline = InternetGetConnectedState(LFlags, 0&) End Function |
||
![]() |
||
JantjeKeizer
Groupie
Joined: 12 February 2008 Status: Offline Points: 70 |
Post Options
Thanks(0)
Quote Reply
Posted: 23 June 2009 at 3:08am |
|
But it's not always reliable. The way I do it now is WSAStartup then gethostbyname and then WSACleanup |
||
![]() |
||
tralfaz
Groupie
Joined: 21 June 2009 Status: Offline Points: 36 |
Post Options
Thanks(0)
Quote Reply
Posted: 23 June 2009 at 10:47am |
|
|
I tried IsOnline = InternetGetConnectedState(LFlags, 0&)
It's not reliable at all. I can unplug the cable and it still thinks its online. I think it caches something. I'll try the other suggestions. Thanks guys. |
||
![]() |
||
terrym
Senior Member
Joined: 13 April 2007 Status: Offline Points: 836 |
Post Options
Thanks(0)
Quote Reply
Posted: 25 June 2009 at 9:13am |
|
|
if ( InternetCheckConnection( "http://www.google.com", FLAG_ICC_FORCE_CONNECTION, 0 ) return TRUE;
this has worked for us without problems
|
||
|
Thank you,
Terry Mancey email terry@tmancey.ltd.uk | linkedin www.tmancey.ltd.uk | twitter @tmancey |
||
![]() |
||
tralfaz
Groupie
Joined: 21 June 2009 Status: Offline Points: 36 |
Post Options
Thanks(0)
Quote Reply
Posted: 25 June 2009 at 9:37am |
|
|
but what if Google.com goes away (just kidding, haha)
Nice and simple, I'll give it a shot. Thank you, Tra |
||
![]() |
||
JantjeKeizer
Groupie
Joined: 12 February 2008 Status: Offline Points: 70 |
Post Options
Thanks(0)
Quote Reply
Posted: 25 June 2009 at 11:01am |
|
If that's not important, then this is a good solution |
||
![]() |
||
terrym
Senior Member
Joined: 13 April 2007 Status: Offline Points: 836 |
Post Options
Thanks(0)
Quote Reply
Posted: 25 June 2009 at 1:02pm |
|
|
True, but I guess as we only support from Windows 2000 SP4+ we do not have that issue.
|
||
|
Thank you,
Terry Mancey email terry@tmancey.ltd.uk | linkedin www.tmancey.ltd.uk | twitter @tmancey |
||
![]() |
||
znakeeye
Senior Member
Joined: 26 July 2006 Status: Offline Points: 1672 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 2:46am |
|
|
Pinging Google is a very ugly solution. Imagine if all applications did this. Soon you end up with a DoS attack...
|
||
|
PokerMemento - http://www.pokermemento.com/
|
||
![]() |
||
JantjeKeizer
Groupie
Joined: 12 February 2008 Status: Offline Points: 70 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 3:46am |
|
|
||
![]() |
||
terrym
Senior Member
Joined: 13 April 2007 Status: Offline Points: 836 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 4:49am |
|
|
That was the problem here, we just needed to detect if we had a connection (a real connection) and this was the only reliable method we could find :( if anybody knows of a better reliable method we will happily change our code :)
|
||
|
Thank you,
Terry Mancey email terry@tmancey.ltd.uk | linkedin www.tmancey.ltd.uk | twitter @tmancey |
||
![]() |
||
znakeeye
Senior Member
Joined: 26 July 2006 Status: Offline Points: 1672 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 4:52am |
|
|
#include <Wininet.h>
#pragma comment(lib, "wininet")
BOOL isConnected = InternetGetConnectedState(INTERNET_CONNECTION_LAN | INTERNET_CONNECTION_MODEM, 0); |
||
|
PokerMemento - http://www.pokermemento.com/
|
||
![]() |
||
terrym
Senior Member
Joined: 13 April 2007 Status: Offline Points: 836 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 4:57am |
|
Postitive we tried this, and the problem we found was if we disconnected the network cable it would still report as connected?
|
||
|
Thank you,
Terry Mancey email terry@tmancey.ltd.uk | linkedin www.tmancey.ltd.uk | twitter @tmancey |
||
![]() |
||
terrym
Senior Member
Joined: 13 April 2007 Status: Offline Points: 836 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 4:58am |
|
|
but will definately give this a go, once we have discovered :( why the White ribbon theme is not working :( on our application but it is in the Ribbon Sample SDI application
hopefully when Oleg replies to our support ticket he will have a solution as posted video to forum to show stange problem
|
||
|
Thank you,
Terry Mancey email terry@tmancey.ltd.uk | linkedin www.tmancey.ltd.uk | twitter @tmancey |
||
![]() |
||
JantjeKeizer
Groupie
Joined: 12 February 2008 Status: Offline Points: 70 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 4:58am |
|
|
||
![]() |
||
znakeeye
Senior Member
Joined: 26 July 2006 Status: Offline Points: 1672 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 4:58am |
|
|
Also, you might want to check some firewall settings before firing up a homepage etc. If you don't, some users will block your application. I believe the best approach is to notify the user before connecting to the Internet the first time.
|
||
|
PokerMemento - http://www.pokermemento.com/
|
||
![]() |
||
znakeeye
Senior Member
Joined: 26 July 2006 Status: Offline Points: 1672 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 5:01am |
|
|
You're right.
"A return value of TRUE from InternetGetConnectedState indicates that at least one connection to the Internet is available. It does not guarantee that a connection to a specific host can be established."
Have to do some research here. It seems odd that such a simple task is that hard...
|
||
|
PokerMemento - http://www.pokermemento.com/
|
||
![]() |
||
terrym
Senior Member
Joined: 13 April 2007 Status: Offline Points: 836 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 5:02am |
|
Cool we will add this to our range of software over the coming months as a great idea.
|
||
|
Thank you,
Terry Mancey email terry@tmancey.ltd.uk | linkedin www.tmancey.ltd.uk | twitter @tmancey |
||
![]() |
||
terrym
Senior Member
Joined: 13 April 2007 Status: Offline Points: 836 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 5:04am |
|
Tell us about it, we had trouble finding a solution for a task that should have been very simple. Then we stumbled upon the method we use as above, which has worked perfectly but like you say we'd prefer a better solution.
|
||
|
Thank you,
Terry Mancey email terry@tmancey.ltd.uk | linkedin www.tmancey.ltd.uk | twitter @tmancey |
||
![]() |
||
znakeeye
Senior Member
Joined: 26 July 2006 Status: Offline Points: 1672 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 5:05am |
|
|
I believe this is the right way of doing this:
InternetCheckConnection(NULL, FLAG_ICC_FORCE_CONNECTION, 0);
Who uses OS < Win2k??
|
||
|
PokerMemento - http://www.pokermemento.com/
|
||
![]() |
||
terrym
Senior Member
Joined: 13 April 2007 Status: Offline Points: 836 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 5:08am |
|
We have also tried this method and it must have also failed in some circumstances. However yes I agree our applications require Windows 2000 (SP4+) and soon we will even drop Windows 2000 support.
|
||
|
Thank you,
Terry Mancey email terry@tmancey.ltd.uk | linkedin www.tmancey.ltd.uk | twitter @tmancey |
||
![]() |
||
znakeeye
Senior Member
Joined: 26 July 2006 Status: Offline Points: 1672 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 5:22am |
|
|
PokerMemento - http://www.pokermemento.com/
|
||
![]() |
||
znakeeye
Senior Member
Joined: 26 July 2006 Status: Offline Points: 1672 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 5:45am |
|
|
How about this?
IsNetworkAlive(NETWORK_ALIVE_WAN)
|
||
|
PokerMemento - http://www.pokermemento.com/
|
||
![]() |
||
znakeeye
Senior Member
Joined: 26 July 2006 Status: Offline Points: 1672 |
Post Options
Thanks(0)
Quote Reply
Posted: 26 June 2009 at 6:30am |
|
|
In my own software, I keep my WINVER set to 0x500, but I don't perform any tests on Win2k. That is, it should work in Win2k, but no guarantees. I think it's fair enough.
Did you test the function in my previous post?
|
||
|
PokerMemento - http://www.pokermemento.com/
|
||
![]() |
||
terrym
Senior Member
Joined: 13 April 2007 Status: Offline Points: 836 |
Post Options
Thanks(0)
Quote Reply
Posted: 27 June 2009 at 10:20am |
|
|
Hi
Sorry not had chance as been trying to fix white theme. However will definately try this on monday, thanks
|
||
|
Thank you,
Terry Mancey email terry@tmancey.ltd.uk | linkedin www.tmancey.ltd.uk | twitter @tmancey |
||
![]() |
||
terrym
Senior Member
Joined: 13 April 2007 Status: Offline Points: 836 |
Post Options
Thanks(0)
Quote Reply
Posted: 28 June 2009 at 10:30am |
|
Personally we check 3 main sites: Google, Microsoft and Yahoo to make sure ;)
|
||
|
Thank you,
Terry Mancey email terry@tmancey.ltd.uk | linkedin www.tmancey.ltd.uk | twitter @tmancey |
||
![]() |
||
Smucker
Senior Member
Joined: 02 February 2008 Status: Offline Points: 156 |
Post Options
Thanks(0)
Quote Reply
Posted: 01 July 2009 at 2:02pm |
|
|
You might want to try GetAddrInfo() for several known hosts. This will
avoid connecting to anything but the DNS server(s). Unfortunately, if
the DNS server is on a local network system, or all addresses are cached (there or on your local system) it might give back a valid
address even though outbound connections are down.
You might want to experiment with sending it invalid or reserved IPV4 addresses; these may force a connection to a real (external) DNS server, and the error returns may be different depending on the local system's (or local network's) actual connection to the internet. I haven't experimented with that. |
||
|
Product: Xtreme Toolkit Pro version 13.2 (Unicode, static build)
Platform: Windows 200x/XP/Vista/Win7 (32/64 bit) Language: Visual C++ 9.0 (Studio 2008) |
||
![]() |
||
Post Reply
|
|
|
Tweet
|
| Forum Jump | Forum Permissions ![]() You cannot post new topics in this forum You cannot reply to topics in this forum You cannot delete your posts in this forum You cannot edit your posts in this forum You cannot create polls in this forum You cannot vote in polls in this forum |