Click here to Skip to main content
11,477,044 members (74,789 online)
Click here to Skip to main content

Testing Internet Connectivity

, 19 Jan 2011 CPOL 39.5K 33
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.
Follow on   LinkedIn

Comments and Discussions

 
QuestionIs there a way in C# to monitor a certain process DNS requests? Pin
era ahmadian11-May-15 4:32
memberera ahmadian11-May-15 4:32 
GeneralMy vote of 5 Pin
Gaurav.Kumar.Arora30-Oct-14 12:15
professionalGaurav.Kumar.Arora30-Oct-14 12:15 
GeneralMy vote of 5 Pin
Hamed_Farag18-Aug-13 9:03
memberHamed_Farag18-Aug-13 9:03 
GeneralMy vote of 5 Pin
sandeshjkota15-May-13 2:35
membersandeshjkota15-May-13 2:35 
GeneralMy vote of 4 Pin
Nikolay Aph K.1-Feb-13 3:59
memberNikolay Aph K.1-Feb-13 3:59 
GeneralRe: But yes you have put down good options its worth of 5 , 5 fr... Pin
Shivprasad koirala13-Nov-11 1:44
memberShivprasad koirala13-Nov-11 1:44 
GeneralRe: What if DNS server is down i agree to sledge method 5 is per... Pin
Shivprasad koirala13-Nov-11 1:41
memberShivprasad koirala13-Nov-11 1:41 
GeneralRe: Also, you don't have to hardcode the google url. You could ... Pin
fsaGuy24-Jan-11 6:34
memberfsaGuy24-Jan-11 6:34 
GeneralReason for my vote of 5 Nice info Pin
cdolkan14-Mar-11 23:31
membercdolkan14-Mar-11 23:31 
GeneralReason for my vote of 5 Good bunch Pin
thatraja5-Mar-11 5:30
mvpthatraja5-Mar-11 5:30 
GeneralReason for my vote of 5 Nice article. Good to know/learn tha... Pin
R&D_Man14-Feb-11 22:48
memberR&D_Man14-Feb-11 22:48 
GeneralReason for my vote of 4 I've always look for such article. Pin
BabakArj25-Jan-11 10:16
memberBabakArj25-Jan-11 10:16 
GeneralReason for my vote of 5 Nice article. Good to know/learn tha... Pin
Lokanta_brahmachari25-Jan-11 2:16
memberLokanta_brahmachari25-Jan-11 2:16 
GeneralYou do not have to hard code the google url. You could have ... Pin
MrAnderson1st24-Jan-11 6:41
memberMrAnderson1st24-Jan-11 6:41 
GeneralIf google goes down on every server, that would be a first I... Pin
electrawinds21-Jan-11 3:12
memberelectrawinds21-Jan-11 3:12 
GeneralReason for my vote of 4 good Pin
Pranay Rana19-Jan-11 0:11
memberPranay Rana19-Jan-11 0:11 
GeneralReason for my vote of 5 good info! Pin
GPUToaster18-Jan-11 21:14
memberGPUToaster18-Jan-11 21:14 
GeneralReason for my vote of 5 Very Nice Pin
Khaniya18-Jan-11 19:29
memberKhaniya18-Jan-11 19:29 
GeneralReason for my vote of 3 Methods 1,2,3 and 4 are complete cra... Pin
SledgeHammer0118-Jan-11 14:52
memberSledgeHammer0118-Jan-11 14:52 
GeneralRe: You are not completely right. Methods 1 & 2 depend on both D... Pin
Ozcan ILIKHAN19-Jan-11 6:22
memberOzcan 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
Web03 | 2.8.150520.1 | Last Updated 19 Jan 2011
Article Copyright 2011 by Ozcan ILIKHAN
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid