Click here to Skip to main content
Click here to Skip to main content

Testing Internet Connectivity

, 19 Jan 2011 CPOL
Rate this:
Please Sign up or sign in to vote.
Some of the functions of our applications may require a run-time test of internet connectivity. Once internet connectivity is detected, the functions that require internet access may temporarily be disabled and/or the user can be notified via an alert message.

Introduction

Some of the functions of our applications may require a run-time test of internet connectivity. Once internet connectivity is detected, the functions that require internet access may temporarily be disabled and/or the user can be notified via an alert message. Otherwise, the application may result in error during operation or it may cause annoying problems for the user. In this article, I will try to demonstrate a couple of ways to overcome this problem.
 

Method 1: WebRequest

We may send a web request to a website which assumed to be online always, for example google.com. If we can get a response, then obviously the device that runs our application is connected to the internet.
 
	public static bool WebRequestTest()
        {
            string url = "http://www.google.com";
            try
            {
                System.Net.WebRequest myRequest = System.Net.WebRequest.Create(url);
                System.Net.WebResponse myResponse = myRequest.GetResponse();
            }
            catch (System.Net.WebException)
            {
                return false;
            }
            return true;
        }
 

Method 2: TCP Socket

There can be some delay in response of web request therefore this method may not be fast enough for some applications. A better way is to check whether port 80, default port for http traffic, of an always online website.


 
	public static bool TcpSocketTest()
        {
            try
            {
                System.Net.Sockets.TcpClient client =
                    new System.Net.Sockets.TcpClient("www.google.com", 80);
                client.Close();
                return true;
            }
            catch (System.Exception ex)
            {
                return false;
            }
        }
 

Method 3: Ping

There can be some delay in response of web request, therefore this method may not be fast enough for some applications. A better way is to check whether port 80, default port for http traffic, of an always online website.
 
public bool PingTest()
        {
            System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
 
            System.Net.NetworkInformation.PingReply pingStatus =
                ping.Send(IPAddress.Parse("208.69.34.231"),1000);
 
            if (pingStatus.Status == System.Net.NetworkInformation.IPStatus.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
 

You cannot use this method in .NET Compact Framework because there is no NetworkInformation namespace that comes with Compact Framework. However, you can use Smart Device Framework (http://www.opennetcf.com[^], Community Edition is free for download) provided by OpenNETCF. This framework comes with many other useful tools that .NET Compact Framework does not contain.

 

Notice that I used Google’s IP address 208.69.34.231. We could use Google’s web address www.google.com:

 
  System.Net.NetworkInformation.PingReply pingStatus = ping.Send("www.google.com",1000);
 

However, that will require DNS lookup which causes extra delay.

 

Method 4: DNS Lookup

Alternatively you can use DNS lookup to check internet connectivity. This method is faster than Ping method.
 
	public static bool DnsTest()
        {
            try
            {
                System.Net.IPHostEntry ipHe =
                    System.Net.Dns.GetHostByName("www.google.com");
                return true;
            }
            catch
            {
                return false;
            }
        }
 

Method 5: Windows Internet API (WinINet)

WinINet API provides functions to test internet connectivity, such as InternetCheckConnection and InternetGetConnectedState. I do not have any idea about what these fucntions do exactly to test internet connectivity. You may refer to http://msdn.microsoft.com/en-us/library/aa384346(v=VS.85).aspx and http://msdn.microsoft.com/en-us/library/aa384702(v=VS.85).aspx for details.
 

An example usage can be:

 
	[DllImport("wininet.dll")]
        private extern static bool InternetGetConnectedState(out int connDescription, int ReservedValue);
 
	//check if a connection to the Internet can be established 
        public static bool IsConnectionAvailable()
        {
            int Desc;
            return InternetGetConnectedState(out connDesc, 0);
        }
 

Summary

In this article, we have seen a couple of different ways to test internet connectivity. Each method has its own advantages and disadvantages. So, it is up to you to choose the best way for your platform and application.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Ozcan ILIKHAN
Engineer
Turkey Turkey
Borned in Malatya, TURKEY. Graduated from Department of Computer Engineering, Eastern Mediterranean University, T.R.N.C
 
Currently, PhD student-Graduate Research Assistant in Computer Sciences Department at UW-Madison.

Comments and Discussions

 
GeneralMy vote of 5 PinprofessionalGaurav.Kumar.Arora30-Oct-14 12:15 
GeneralMy vote of 5 PinmemberHamed_Farag18-Aug-13 9:03 
GeneralMy vote of 5 Pinmembersandeshjkota15-May-13 2:35 
GeneralMy vote of 4 PinmemberNikolay Aph K.1-Feb-13 3:59 
GeneralRe: But yes you have put down good options its worth of 5 , 5 fr... PinmemberShivprasad koirala13-Nov-11 1:44 
GeneralRe: What if DNS server is down i agree to sledge method 5 is per... PinmemberShivprasad koirala13-Nov-11 1:41 
GeneralRe: Also, you don't have to hardcode the google url. You could ... PinmemberfsaGuy24-Jan-11 6:34 
GeneralReason for my vote of 5 Nice info Pinmembercdolkan14-Mar-11 23:31 
GeneralReason for my vote of 5 Good bunch Pinmvpthatraja5-Mar-11 5:30 
GeneralReason for my vote of 5 Nice article. Good to know/learn tha... PinmemberR&D_Man14-Feb-11 22:48 
GeneralReason for my vote of 4 I've always look for such article. PinmemberBabakArj25-Jan-11 10:16 
GeneralReason for my vote of 5 Nice article. Good to know/learn tha... PinmemberLokanta_brahmachari25-Jan-11 2:16 
GeneralYou do not have to hard code the google url. You could have ... PinmemberMrAnderson1st24-Jan-11 6:41 
GeneralIf google goes down on every server, that would be a first I... Pinmemberelectrawinds21-Jan-11 3:12 
GeneralReason for my vote of 4 good PinmemberPranay Rana19-Jan-11 0:11 
GeneralReason for my vote of 5 good info! PinmemberGPUToaster18-Jan-11 21:14 
GeneralReason for my vote of 5 Very Nice PinmemberKhaniya18-Jan-11 19:29 
GeneralReason for my vote of 3 Methods 1,2,3 and 4 are complete cra... PinmemberSledgeHammer0118-Jan-11 14:52 
GeneralRe: You are not completely right. Methods 1 & 2 depend on both D... PinmemberOzcan ILIKHAN19-Jan-11 6:22 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.141223.1 | Last Updated 19 Jan 2011
Article Copyright 2011 by Ozcan ILIKHAN
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid